【问题标题】:PHP Looping through datesPHP循环遍历日期
【发布时间】:2013-10-25 14:28:12
【问题描述】:

我有以下 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 之后的所有内容都可以正常工作(而且速度很快),但一旦过了这个日期,它就会超时。有什么想法吗?

【问题讨论】:

  • 这意味着执行脚本所用的时间比 set_time_limit 中设置的时间长(默认为 30 秒)。您可能需要再次查看您的脚本以使其更快,或者您可以将 set_time_limit 设置为更大的值。
  • @Ronald01990 是的,我知道,我只是在问,在不更改 set_time 的情况下如何使循环更高效。谢谢
  • 你真的需要创建那个数组吗?
  • @Ashalynd 我使用数组为表格提供标题,用于显示给定一周的日期。
  • 对不起,我删除了我的答案,因为我错了......为什么你想要一个包含两个日期之间所有星期的数组?你想用它做什么?什么是最终的 HTML?图片?

标签: php date loops


【解决方案1】:

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

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

【讨论】:

  • 这只是我必须忍受的第二件事,然而,它实际上已经成为我需要找出它为什么在特定日期超时的事情(见上面的编辑)。您对 addDays 函数的看法是正确的,但无论我通过 addDays(1) 还是 addDays(7),它仍然可以正常工作
猜你喜欢
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-21
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
相关资源
最近更新 更多