带有time()和DST问题的PHP计算

时间:2011-11-04 15:38:52

标签: php time dst

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

服务器时区是UTC -5,我也用

在我的脚本中设置它
date_default_timezone_set('America/Montreal');

我们将在11月6日将时钟设置为1小时,并且 time()的任何数学计算都会受到影响。 (当夏令时在秋季结束时,时钟会缩短一小时,标准时间会恢复。)
凌晨2点,它将是11月6日凌晨1点。


例如,日期1:1320379200的时间戳(星期五第4次 2011年11月上午12:00:00,时间更改前)
我想在此日期添加7天... 1320379200 +(7 * 24 * 60 * 60)

新日期的时间戳现在为1320984000(星期四 10th 2011年11月11:00:00 PM,时间更改后)
但它应该是1320987600(2011年11月11日星期五12:00:00 AM)
我想念3600秒,所以一小时。


所以只是为了说清楚(伪代码):

$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)

所以我错过了一个小时,这可能与夏令时有关。


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

我希望你们明白我在说什么,因为我有点困惑。 请原谅我的英语,我正在尽我所能!

1 个答案:

答案 0 :(得分:2)

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

strtotime("+7 days", $timestampOfStartinDate);

或者,使用PHP's DateTime class