1

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

<?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。所以它本质上是禁用的。这是一个截图来演示

在此处输入图像描述

在我的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 有什么关系吗?
4

2 回答 2

2

DST 信息存储在 timezonedb 中,这是一个默认情况下与每个 PHP 安装一起提供的数据库。由于您的 PHP 版本确实很古老,并且您说您所在国家/地区的 DST 设置最近发生了变化,因此 timezonedb 已经过时了。它需要通过更新 PHP 本身或通过 PECL 更新数据库来保持更新。

请参阅http://php.net/manual/en/datetime.installation.php、http://pecl.php.net/package/timezonedb如何安装 PECL 扩展

于 2013-09-02T08:52:47.160 回答
0

您可以在日期函数上使用“e”。

时区 --- --- e 时区标识符(在 PHP 5.1.0 中添加)示例:UTC、GMT、大西洋/亚速尔群岛

或者您可以将“I”用于 DST

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

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

于 2013-09-02T08:38:33.323 回答