PHP坚持错误的时区

时间:2013-09-02 08:33:41

标签: php apache dst

这是一个脚本,每个语句旁边的注释中每行的输出都是为了演示我的问题

<?php
    echo date_default_timezone_get(); //Europe/Helsinki
    date_default_timezone_set('Africa/Cairo');
    $script_tz = date_default_timezone_get();
    if (strcmp($script_tz, ini_get('date.timezone'))){
        echo "\nScript timezone differs from ini-set timezone."; //True, this block is ran
    } else {
        echo "\nScript timezone and ini-set timezone match.";
    }
    echo "\n".date_default_timezone_get(); //Africa/Cairo
    echo "\n'".ini_get('date.timezone')."'"; //''
    echo "\n".date('Z'); //10800
    echo "\n".date("m/d/Y h:i:s A T",strtotime("-1 hour")); //I still have to do this to obtain the correct date !
?>

我在开罗,现在我们已经不再拥有DST约3年了。服务器的时区设置正确,DST选项甚至无法启用或禁用DST。所以它本身就是残疾人。这是一个演示的截图

enter image description here

在我的php.ini文件中

[Date]
; Defines the default timezone used by the date functions
;date.timezone =

我的 php 版本是

PHP 5.2.17 (cli) (built: Jan  6 2011 17:28:41)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
  • 即使我设置了默认时区,为什么还要操作date()输出(即减少一小时)以获得与服务器时间匹配的正确时间?
  • 为什么它坚持Europe/Helsinki是我的时区?
  • 这可能与Apache有关吗?

2 个答案:

答案 0 :(得分:2)

DST信息存储在timezonedb中,默认情况下,每个PHP安装都附带一个数据库。由于您的PHP版本非常古老,并且您说您所在国家/地区的DST设置最近已更改,因此timezonedb已过时。它需要通过更新PHP本身或通过PECL更新数据库来保持更新。

请参阅http://php.net/manual/en/datetime.installation.phphttp://pecl.php.net/package/timezonedbHow to install PECL extensions

答案 1 :(得分:0)

您可以在日期功能上使用“e”。

  

时区--- ---   e时区标识符(在PHP 5.1.0中添加)示例:UTC,GMT,Atlantic / Azores

或者您可以使用“我”代替DST

源; http://php.net/manual/en/function.date.php

希望这能解决你的问题:)