0

我有以下 while 循环,它比较 2 个日期以查看 1 是否小于另一个,如果不是,则它将第一个日期添加一周。

它工作正常,但是如果日期之间存在较大差异(即大于 12 个月),我会收到超时错误,因为它已经超过了最大执行时间。

谁能帮我提高效率?

        while($startDate->timestamp < $current_week->timestamp){
            $data['weeks'][$w] = array(
                'monday' => $startDate->startofWeek()->format('d/m/Y'), 
                'sunday' => $startDate->endofWeek()->format('d/m/Y')
            );
            $w++;
            $startDate = $startDate->addDays(7); // Move it on to the following week
        }

我应该补充一点,我正在使用 DateTime 的 Carbon API 扩展

谢谢

- - 编辑 - -

发生了一些我不明白的奇怪事情。如果我将硬编码的日期传递给 $startDate,那么 2013-01-06 之后的所有内容都可以正常工作(而且速度很快),但一旦过了这个日期,它就会超时。有什么想法吗?

4

1 回答 1

0

看起来您所做的$startDate比您预期的要多一些 - 您正在修改对象,->startOfWeek()->endOfWeek()不仅仅是计算字符串输出;我对Carbon的源代码的阅读是,您调用的每个方法都会修改对象,因此您的 while 循环的最后一行中的赋值是不必要的(它可以很容易地写成$startDate->addDays(7);。因此,您的代码有点比它可能的效率低一点,甚至可能比你想要的多循环一到两倍。

但是,我怀疑这个代码块不是你真正的问题,它在你的代码库中更进一步 - 如果你的问题随着 $data['weeks'] 的大小而增长,那么它可能是你的方式'为您的 HTML 重新处理它。

于 2013-10-25T15:35:08.313 回答