2016-04-29 99 views
2

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

'欧洲/伦敦'!='GMT' – CBroe

+1

看起来像服务器设置为'欧洲/伦敦',其*目前不是* GMT,但BST(英国夏令时)=> GMT + 1 – CD001

回答

2

*警告: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

+0

好的,这是有道理的。不知道格林尼治标准时间没有考虑到夏令时。 – Revover

+0

很高兴阅读:http://www.timeanddate.com/time/zones/gmt –

1

是,夏令时是导致此。 因此日期()表示BST 1和gmdate()表示格林威治标准时间0.

因此,不确定为什么,将查看它。可能因为时区是伦敦,所以它在BST。