我通过添加86400(1天中的秒数)来迭代时间以列出日期。
define("DAY_SEC", 86400);
for ($i = strtotime("2016-10-01"); $i<=strtotime("2016-11-05"); $i = $i + DAY_SEC){
echo Date("Y-m-d, H:i:s", $i). ' = '. $i . '<br/>';
}
但是看看日期"2016-10-30"。它有两次,但时间不同
2016-10-28, 00:00:00 = 1477605600
2016-10-29, 00:00:00 = 1477692000
2016-10-30, 00:00:00 = 1477778400 <- here
2016-10-30, 23:00:00 = 1477864800 <- here
2016-10-31, 23:00:00 = 1477951200
我做错了什么?
谢谢
不要使用时间戳进行加法或减法或任何其他数学运算来计算过去或未来的日期。您的代码将在美国和其他时区的2016-11-05
之后失败,因为这是今年日光节约时间的结束。strtotime()
意识到这一点,所以与"+1 day"
或类似的东西一起使用:
for ($i = strtotime("2016-10-01"); $i<=strtotime("2016-11-05"); $i = strtotime("+1 day", $i)){
echo Date("Y-m-d, H:i:s", $i). ' = '. $i . '<br/>';
}
结果是2016-10-30
在许多其他地方是日光节约时间的结束,所以您正在使用的时区受此更改的影响。
这就是DST(日光节约时间)。尝试使用strtotime()
.
$start = strtotime("2016-10-01");
$end = strtotime("2016-11-05");
$interval = 1; //in days
for ($i = $start; $i<=$end; $i = $i + strtotime("+".$interval." days", $i)){
echo Date("Y-m-d, H:i:s", $i). ' = '. $i . '<br/>';
}