【问题标题】:PHP have result different timezone two datetimePHP有不同的时区两个日期时间
【发布时间】:2014-11-03 01:37:28
【问题描述】:

php版本: 5.5.9-1ubuntu4.5

php.ini相关配置:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone = UTC

我的 PHP 代码:

<?php
$datetime1 = new DateTime('2009-10-01 00:00:00');
$datetime2 = new DateTime('2009-11-01 00:00:00');
echo $datetime1->format('c') . '<br/>';
echo $datetime2->format('c') . '<br/>';

当我从浏览器访问该代码时,我得到以下结果:

2009-10-01T00:00:00+08:00
2009-11-01T00:00:00+07:00

我的问题:为什么上面的两个日期有不同的时区?

当我将 date.timezone 设置为 UTC 或其他时区时,上面的代码结果将给出正确的时区值。

【问题讨论】:

  • 如果您不通过 php.ini 设置时区,您的代码是在哪个时区?可能在您的两个日期之间有 DST 切换的时区。
  • 使用date_default_timezone_get()查看当前时区。

标签: php date datetime timezone


【解决方案1】:

夏令时。在您当地的时区,夏令时显然在 10 月的某个时间结束,将时钟拨回一小时,并更改您相对于 UTC 的时间偏移量。

【讨论】:

    【解决方案2】:

    您的服务器时间未设置为 UTC,并且您的 php.ini 未设置为使用 UTC,因此您将获得服务器设置的任何时间。

    你的 php.ini 文件的这一部分:-

    [Date]
    ; Defines the default timezone used by the date functions
    ; http://php.net/date.timezone
    ;date.timezone = UTC
    

    应该是这样的:-

    [Date]
    ; Defines the default timezone used by the date functions
    ; http://php.net/date.timezone
    date.timezone = UTC
    

    请注意,冒号已从行首删除。冒号表示该行的其余部分是注释,应该被忽略。

    如果您进行此更改并重新启动 Apache,PHP 现在将始终以 UTC 运行,并且您的测试代码将按预期运行。

    如果可以,您也应该将服务器时区设置为 UTC。

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 2022-01-04
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      相关资源
      最近更新 更多