strtotime()似乎被特殊日期窃听

时间:2014-10-14 09:37:10

标签: php

我正在编写一个计算两个日期之间天数的函数。

奇怪的是,在一个特殊的日子里,我有一种奇怪的行为。这是我的代码的一部分:

$startTimestamp = strtotime('25-10-2014');
$endTimestamp   = strtotime('28-10-2014');

for($i = $startTimestamp; $i <= $endTimestamp; $i = $i + (60 * 60 * 24))
{
    echo date("d-m-Y", $i).'<br />';            
}

这个例子给了我这个结果:

  

25-10-2014

     

26-10-2014

     

26-10-2014

     

27-10-2014

我不知道为什么日期&#34; 26-10-2014&#34;出现两次。

如果我尝试其他日期,例如:

$startTimestamp = strtotime('25-11-2014');
$endTimestamp   = strtotime('28-11-2014');

结果是正确的:

  

25-11-2014

     

26-11-2014

     

27-11-2014

     

28-11-2014

2 个答案:

答案 0 :(得分:7)

可能是因为PHP配置的时区中的DST(夏令时)。

这意味着,如果你向前跳24小时,你仍然会在同一天,因为这一天是25小时。

答案 1 :(得分:0)

我会使用DateTime类:

$startTime = new DateTime('25-10-2014');
$endTime   = new DateTime('28-10-2014');

do {
    echo $startTime->format('d-m-Y'), PHP_EOL;
} while($startTime->modify('+1 day') <= $endTime);

请注意,在比较DateTime对象时,可以使用<=运算符。此外,DateTime::modify()方法还知道夏令时问题。 (请注意,10月26日的夏令时有变化)