PHP的 strftime()和 date()函数在同一个脚本中提供不同时区的原因是什么?
将默认时区设置为UTC(使用 date_default_timezone_set()功能)后,我得到以下结果:
strftime('%z') gives +0300
date('O') gives +0000
我编写了一段代码用于测试目的,因此如果您愿意,可以在您的计算机上运行它:
<?php
$current_time = time();
$br = "<br />\n";
print 'Script has been executed on ' . date('Y.m.d H:i:s O', $current_time) . ' (<i>date(O)</i>)' . $br .
$br .
'ini_get(\'date.timezone\'): ' . ini_get('date.timezone') . $br .
'date_default_timezone_<b>get</b>(): ' . date_default_timezone_get() . $br .
'/etc/localtime: <b>' . exec('/bin/ls -l /etc/localtime|/usr/bin/cut -d"/" -f7,8') . '</b>' . $br .
$br .
'phpversion(): ' . phpversion() . $br .
$br . $br;
// working with default timezone
print '<b>Default:</b>' . $br . $br .
'strftime(%z): ' . strftime("%z", $current_time) . $br .
'date(O): ' . date("O", $current_time) . $br . $br . $br;
// setting timezone to UTC
date_default_timezone_set('UTC');
print 'After <b>date_default_timezone_set(\'UTC\'):</b>' . $br . $br .
'strftime(%z): ' . strftime("%z", $current_time) . $br .
'date(O): ' . date("O", $current_time) . $br . $br . $br;
结果(在Mac OS X 10.10.5上):
Script has been executed on 2017.06.12 16:58:04 +0200 (date(O))
ini_get('date.timezone'): Europe/Berlin
date_default_timezone_get(): Europe/Berlin
/etc/localtime: Europe/Moscow
phpversion(): 5.6.2
Default:
strftime(%z): +0400
date(O): +0200
After date_default_timezone_set('UTC'):
strftime(%z): +0300
date(O): +0000
即使使用 date_default_timezone_set()将时区设置为UTC,两个不同的函数也会提供不同的时区。