PHP 循环访问日期


PHP Looping through dates

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

应该补充一点,我正在使用日期时间的碳API扩展

谢谢

----编辑----

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

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

但是,我怀疑这段代码不是你真正的问题,它在你的代码库的更下游 - 如果你的问题随着$data['周']的大小而增长,那么它可能是你为HTML处理它的方式。