我正在编写一个计算两个日期之间天数的函数。
奇怪的是,在一个特殊的日子里,我有一种奇怪的行为。这是我的代码的一部分:
$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
答案 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日的夏令时有变化)