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

为什么strftime()和date()在PHP中显示不同的时区?,php,timezone,Php,Timezone,PHP的strftime()和date()函数在同一脚本中给出不同时区的原因是什么 将默认时区设置为UTC(使用date\u default\u timezone\u set()函数)后,我得到以下结果: strftime('%z') gives +0300 date('O') gives +0000 我编写这段代码是为了进行测试,因此如果需要,您可以在计算机上运行它: <?php $current_time = time(); $br = "<br />\n"; pri

PHP的strftime()和date()函数在同一脚本中给出不同时区的原因是什么

将默认时区设置为UTC(使用date\u default\u timezone\u 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;

即使使用date\u default\u timezone\u set()将时区设置为UTC,两个不同的函数也会给出不同的时区。

。也许这是一个只影响你平台的bug。@阿尔瓦罗冈萨雷斯确实有奇怪的行为,这给了我:“+0400”“+0200”“+0300”“+0000”“+0400”“+0200”
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