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


date() and gmdate() return different results

我运行了一个简单的测试,比较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

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

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

date_default_timezone_set('Europe/London');

date_default_timezone_set('UTC');

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

提醒:GMT没有夏令时,它总是相同的时间。欧洲/伦敦实行夏令时。这就是为什么我在gmdate中给出0

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

但不确定为什么,我们会调查一下。可能是因为时区是伦敦,所以它在英国夏令时。