我在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更改为另一个日期,这确实有效,但也会在此日期(以及其他某个日期)停留。
我已经编写了其他代码来完成这项工作。 但有人知道它失败的原因,或者我的代码是错的吗?
谢谢。
答案 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/>';
}
答案 1 :(得分:3)
strtotime
有too 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>';
}