2011-11-05 86 views
1

这个问题出现在俄罗斯开始生活在格林威治标准时间+4之后。time()返回正确的值,但日期('O') - 不正确的时区

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

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

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

问题:为什么?是我做错了吗?还是这是托管人的问题?

+2

我认为,服务器需要更新timezone.db:http://pecl.php.net/package/timezonedb – hakre

+0

看得那么清楚:HTTP:// EN。 ria.ru/russia/20111030/168271560.html – hakre

回答

1

正确的UTC为Moscow Time偏移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 
+0

然,并得到: 05/11/2011 23:05 +0300 时区默认:欧洲/莫斯科 时区版本:
致命错误:调用未定义函数timezone_version_get() 所以,我认为,这不是我的错:)将与我的主机管理员联系!谢谢! – fcunited

+0

Ups,我应该检查PHP版本以及:)。 – hakre