PHP计算与time()和DST问题



我使用一个脚本,插入一个日期(yyyy-mm-dd),它比当前日期晚X天。我在第一个时间戳上添加X秒以获得第二个时间戳,在12:00AM。

服务器时区是UTC -5,我也在我的脚本中设置了

date_default_timezone_set('America/Montreal');

我们将时钟设置在11月6日向后一小时,任何与time()相关的数学计算似乎都会受到影响。(当夏令时间在秋季结束时,时钟向后调一小时,标准时间恢复。)
凌晨2点,是11月6日凌晨1点


例如日期1:1320379200 (Friday 4th November 2011 12:00:00 AM, BEFORE time change)的时间戳
我想在这个日期上加7天……1320379200 + (7 * 24 * 60 * 60)

新日期的时间戳现在是1320984000(星期四10 2011年11月11:00:00 PM,时间改变后)
但它应该是1320987600(星期五11月2011 12:00:00 AM)
我错过了3600秒,也就是1小时。


为了更清楚一点(伪代码):

$timestampOfStartingDate = 1320379200   
echo timestampToDate($timestampOfStartingDate) // show 2011-11-04 (Friday 4th November 2011 12:00:00 AM)
$newTimestampAfter7days = $timestampOfStartingDate + (7 * 24 * 60 * 60)  
echo timestampToDate($newTimestampAfter7days)  // show 2011-11-10 instead of 2011-11-11 (Thursday 10th November 2011 11:00:00 PM instead of Friday 11th November 2011 12:00:00 AM)

所以我少了一个小时,这可能真的和夏令时有关。


问题是我不知道如何解决这个问题。当我们重新进入夏令时时,我不想重做。

我希望你们明白我在说什么,因为我有点困惑。也请原谅我的英语,我已经尽力了!

您应该添加7天,而不是x秒数。

strtotime("+7 days", $timestampOfStartinDate);
或者,使用PHP的DateTime类

最新更新