将某些日期字符串转换为datetime值时出现PHP strtotime错误

时间:2013-11-01 04:46:52

标签: php date strtotime

我在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更改为另一个日期,这确实有效,但也会在此日期(以及其他某个日期)停留。

我已经编写了其他代码来完成这项工作。 但有人知道它失败的原因,或者我的代码是错的吗?

谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

我认为

strtotimetoo many limitations。请使用更新的DateTime lib

$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>';
}