date()和gmdate()返回不同的结果

时间:2016-04-29 10:38:23

标签: php

我运行一个比较date()和gmdate()输出的简单测试,我对结果感到困惑。我理解函数之间的区别,但是,服务器设置为GMT时间,所以我希望结果是相同的。

我检查了时区设置,看起来很好。我怀疑这与白天节省有关。

我希望输出结果是正确的吗?

if (date_default_timezone_get()) {
    echo 'date_default_timezone_set: ' . date_default_timezone_get() . '<br />';
}

echo '<br>Full date '.date("Y-m-d H:i:s T I");
echo '<br>Full date GM '.gmdate("Y-m-d H:i:s T I");

$now = date("Y-m-d H:i:s T I");
$tempDate = $startWeek = time();

$date = new DateTime();
$tempDateU = $date->format('U');

$tempDate = $startWeek = time();
echo '<br>Date: '.date("d/m/y H:i", $tempDate); 
echo '<br>GM Date: '.gmdate("d/m/y H:i", $tempDate);

echo '<br>Date: '.date("d/m/y H:i", $tempDateU); 
echo '<br>GM Date: '.gmdate("d/m/y H:i", $tempDateU);

输出:

date_default_timezone_set: Europe/London

Full date 2016-04-29 11:35:55 BST 1
Full date GM 2016-04-29 10:35:55 GMT 0
Date: 29/04/16 11:35
GM Date: 29/04/16 10:35
Date: 29/04/16 11:35
GM Date: 29/04/16 10:35

2 个答案:

答案 0 :(得分:2)

*警告:date_default_timezone_get():依靠系统的时区设置是不安全的。您必需使用date.timezone设置或date_default_timezone_set()函数。*

所以你需要设置你当前的时区以确定你在做什么:

date_default_timezone_set('Europe/London');

date_default_timezone_set('UTC');

如前所述,欧洲/伦敦与GMT / UTC不同。

提醒:GMT没有DST,总是在同一时间。 欧洲/伦敦有DST。这就是为什么我在gmdate给出0

答案 1 :(得分:1)

是的,夏令时造成了这种情况。 因此,date()表示BST 1,gmdate()表示GMT 0。

不确定为什么会这样看。可能时区是伦敦,所以它在BST。