php.ini
中的php设置:
date.timezone = Asia/Jerusalem.
我的Linux服务器(Ubuntu)显示正确的时间: Wed Oct 1 15:35:39 IDT 2014
但当我echo date('Y-m-d H:i:s');
时,我得到2014-10-01 14:35:39
(提前一小时)。
我也试过date_default_timezone_set('Asia/Jerusalem');
,但结果是一样的
为什么结果会被取消?
答案 0 :(得分:2)
过去几年,以色列在夏令时方面经历了多次变化。今年,DST应该在10月26日之前生效。 DST结束日期的最后一次是在10月1日之前到2012年9月23日。Reference here。
当以色列宣布2013年的变化时,它们在2013d版本的标准版IANA time zone database中发布。那时我实际上是answered a similar question,关于Java如何处理这种变化。
对于PHP,IANA数据库是通过timezonedb PECL package实现的。您可以手动安装此软件包以更新到最新版本的时区数据。
PHP内部还附带了timezonedb的副本,该副本应该是PHP版本发布时可用的最新版本。因此,简单地将PHP升级到最新版本也应该可以解决问题。
如果您想查看当前版本的timezonedb(无论是内置还是更新),您可以致电timezone_version_get()
,as documented here。至少需要2013.4才能进行这一特定更改。目前的版本是2014.7。
答案 1 :(得分:0)
您可以通过在PHP脚本中显式设置时区来解决此问题。您可以使用date_default_timezone_set():
执行此操作date_default_timezone_set('Asia/Jerusalem');
以下是PHP支持的时区列表。
您可能还想尝试一个调用date_default_timezone_get()
的测试脚本来查看它实际设置的内容,以验证这实际上是问题。
答案 2 :(得分:0)
在php中设置并检查您的时区。
<?php
date_default_timezone_set('America/Los_Angeles'); // here set the time zone
$script_tz = date_default_timezone_get();
if (strcmp($script_tz, ini_get('date.timezone'))){
echo 'Script timezone differs from ini-set timezone.';
} else {
echo 'Script timezone and ini-set timezone match.';
}
?>
答案 3 :(得分:0)
亚洲/耶路撒冷时区目前有夏令时;可能是php没有处理这个问题。如果您的php当前正在运行DST,则函数调用date('I')
将返回1
,否则将返回0
。
答案 4 :(得分:0)
更改php时区:
1)打开php.ini文件-...
2)通过添加/修改此行来更改默认时区设置:
vim /etc/php.ini
-删除第一行的date.timezone = Asia/Jerusalem
(如果存在)!
3)保存php.ini文件。
4)重新启动Apache服务器-;
。
现在应该修改时区设置。