php提前一小时显示

时间:2014-10-01 12:35:18

标签: php time timezone

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');,但结果是一样的

为什么结果会被取消?

5 个答案:

答案 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()的测试脚本来查看它实际设置的内容,以验证这实际上是问题。

List of Supported Timezones

答案 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服务器-;。 现在应该修改时区设置。