PHP date()从UNIX Epoch中丢失了一个小时

时间:2012-09-26 16:28:11

标签: php date datetime

您好我在使用php date()函数时遇到了一些奇怪的行为。我试图将日期增加一周,就像这样。

CODE:

<?php
    date_default_timezone_set('Europe/London');
    echo 7*24*60*60;
    echo '<br>';
    echo date('d/m/Y H:i:s', 0);
    echo '<br>';
    echo date('d/m/Y H:i:s', 604800);
?>

这导致以下输出。

输出:

604800
01/01/1970 01:00:00
08/01/1970 01:00:00

您所期望的是,日期增加了7天到第二天。但是在我达到一定的秒数之后,日期函数似乎从一个小时开始松动。

CODE:

<?php
    date_default_timezone_set('Europe/London');
    echo (1351468800 - 1350864000);
    echo '<br>';
    echo date('d/m/Y H:i:s', 1350864000);
    echo '<br>';
    echo date('d/m/Y H:i:s', 1351468800);
?>

以下输出结果

输出:

604800
22/10/2012 01:00:00
29/10/2012 00:00:00

正如您所看到的,即使两个日期之间的差异为604800秒,日期也已丢失一小时。我在两个不同的服务器上测试了这个,我也使用DateTime对象测试了类似的代码,但结果仍然相同。我哪里错了?

2 个答案:

答案 0 :(得分:6)

我相信DST会在这里发挥作用。 DST于2012年10月28日在伦敦结束。

答案 1 :(得分:3)

使用strtotime更可靠

date_default_timezone_set('Europe/London');
$startDate  = "1350864000" ;
$senvenDays = strtotime("+7 day", $startDate);
var_dump(date("d/m/Y H:i:s",$startDate));
var_dump(date("d/m/Y H:i:s",$senvenDays));
var_dump($senvenDays - $startDate);

输出

string '22/10/2012 01:00:00' (length=19)
string '29/10/2012 01:00:00' (length=19)
int 608400