date()和gmdate()返回不同的结果
我运行一个简单的测试,比较date()和gmdate()的输出,我对结果感到困惑。我了解功能之间的区别,但是,服务器设置为GMT时间,所以我期望结果是相同的。date()和gmdate()返回不同的结果
我检查了时区设置,他们似乎很好。我怀疑这与日间储蓄有关。
我很期待输出是相同的吗?
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。
提醒:格林威治标准时间没有DST,它总是同时。欧洲/伦敦有DST。这就是为什么我在gmdate给出0
好的,这是有道理的。不知道格林尼治标准时间没有考虑到夏令时。 – Revover
很高兴阅读:http://www.timeanddate.com/time/zones/gmt –
是,夏令时是导致此。 因此日期()表示BST 1和gmdate()表示格林威治标准时间0.
因此,不确定为什么,将查看它。可能因为时区是伦敦,所以它在BST。
'欧洲/伦敦'!='GMT' – CBroe
看起来像服务器设置为'欧洲/伦敦',其*目前不是* GMT,但BST(英国夏令时)=> GMT + 1 – CD001