PHP循环使用日期

时间:2013-10-25 14:28:12

标签: php date loops

我有以下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扩展

由于

---- ----编辑

有些奇怪的事情正在发生,我不明白。如果我在2013-01-06之后将硬编码的日期传递给$ startDate一切正常(并且快速),但是在此日期之后它会超时。任何人的想法?

1 个答案:

答案 0 :(得分:0)

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

然而,我怀疑这段代码不是你真正的问题,并且它在你的代码库中更进一步 - 如果你的问题以$ data ['周']的大小增长,那么它可能会出现问题您正在为HTML处理它。