2

我在 php 中遇到了 strtotime 问题。

$j = "2013-10-27";
for ($x = 0; $x < 100; $x++) {
  $j = date('Y-m-d', strtotime($j) + 86400);
  echo ' '.$j.' <br/>';
}

由于代码是自我解释的,它会在 $j 中添加一天,然后显示到浏览器。但是当 $j = "2013-10-27" 时,它只打印一个结果 ("2013-10-27")。如果我将 $j 更改为另一个日期,这确实有效,但也会停留在这个日期(和其他日期)。

我已经编写了其他代码来完成这项工作。但是有谁知道它为什么会失败,或者我的代码是错误的?

谢谢你。

4

2 回答 2

4

这是因为您处于夏令时的时区,并且在 10 月 27 日凌晨 1 点,时间恢复到午夜,使其成为 25 小时制。

这可以通过设置时区来重现:

<?php
date_default_timezone_set('Europe/London');
$j = "2013-10-27";
for ($x = 0; $x < 100; $x++) {
  $j = date('Y-m-d', strtotime($j) + 86400);
  echo ' '.$j.' <br/>';
}

http://codepad.viper-7.com/uTbNWf

于 2013-11-01T04:55:43.523 回答
3

strtotime在我看来有太多的限制。改用更新的DateTime

$j = new DateTime('2013-10-27');
$interval = new DateInterval('P1D');
for ($x = 0; $x < 100; $x++) {
    $j->add($interval);
    echo $j->format('Y-m-d'), '<br>';
}
于 2013-11-01T04:55:42.513 回答