为什么strftime()和date()在PHP中显示不同的时区?

时间:2017-06-12 15:20:53

标签: php timezone

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,两个不同的函数也会提供不同的时区。

0 个答案:

没有答案