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

时间:2011-11-05 17:55:45

标签: php timezone

这个问题出现在俄罗斯开始生活在GMT + 4之后。

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

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

但是当我在日期('O')的帮助下试图在几小时内与格林威治时间(格林威治标准时间)区分时,我得到+0300(我认为应该是+0400。请看这里:http://localtimes.info/Europe/Russia/Moscow/Moscow/ - 当前时区偏移:+04:00小时)。

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

1 个答案:

答案 0 :(得分:1)

Moscow Time的正确UTC偏移量为UTC +0400

  

2011年,俄罗斯政府宣布全年将全天观察夏令时,从而有效取代标准时间 - 政府宣称这一行动源于健康问题,归因于每年之间来回转换标准时间和夏令时。[1] 2011年3月27日,莫斯科人将他们的时钟设定为最后一次,有效地永久观察MSD或UTC + 4。

我认为这与timezone.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

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

编辑:此测试脚本使用PHP 5.3函数:timezone_version_get。安装了pecl timezonedb的输出是:

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