3

嗨,我在使用 php date() 函数时遇到了一些奇怪的行为。我正在尝试一次将日期增加一周。

代码:

<?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 天到第二个。但是在我达到一定的秒数后,日期功能似乎比日期少了一个小时。

代码:

<?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 对象测试了类似的代码,但结果仍然相同。我哪里错了?

4

2 回答 2

5

我相信夏令时在这里开始发挥作用。由于 DST 于 2012 年 10 月 28 日在伦敦结束。

于 2012-09-26T16:30:31.260 回答
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
于 2012-09-26T16:35:33.293 回答