time()返回正确的值,但是date('O') -不正确的时区


time() returns correct value, but date('O') - incorrect timezone

这个问题出现在俄罗斯开始使用GMT+4时间之后。

我的主机服务器时间是欧洲/莫斯科。

当我从PHP打印日期('d/m/Y H: I ')时,它返回正确的莫斯科时间。

但是当我尝试在日期('O')的帮助下以小时为单位获得格林威治时间(GMT)的差异时,我得到的是+0300(我认为应该是+0400)。看这里:http://localtimes.info/Europe/Russia/Moscow/Moscow/- 当前时区偏移量:+04:00 )。

问题:为什么?是我做错了还是主人的问题?

莫斯科时间的正确UTC偏移量为UTC +0400:

2011年,俄罗斯政府宣布,未来将全年实行夏令时,从而有效地取代标准时间——政府声称,此举是出于对健康的担忧,原因是标准时间和夏令时之间每年都在来回转换。[1] 2011年3月27日,莫斯科人将他们的时钟调快最后一次,有效地观测MSD,或UTC+4,永久地。

我认为这与time .db的底层库或服务器系统本身有关。试试这个测试脚本(Demo):

date_default_timezone_set('Europe/Moscow');
echo date('d/m/Y H:i O'), "'n";
echo 'timezone default: ', date_default_timezone_get(), "'n";
echo 'timezone version: ', timezone_version_get();

示例输出:

05/11/2011 22:39 +0400
timezone default: Europe/Moscow
timezone version: 0.system

如果在您的服务器上显示错误的值,请联系管理员和/或更新系统。

Edit:这个测试脚本使用了一个PHP 5.3函数:timezone_version_get。安装了pecl timezonedb后的输出为:

05/11/2011 23:17 +0400
timezone default: Europe/Moscow
timezone version: 2011.14