【问题标题】:PHP wrong date/timePHP错误的日期/时间
【发布时间】:2012-01-11 22:54:15
【问题描述】:

PHP date() & time() 返回错误时间:

date.timezone = "Europe/Riga"date() 返回的时间是03-12-2011 08:57:12,但系统时间是03-12-2011 01:57:12(时区欧洲/里加-当时的正确时间)。 当我将时区更改为“欧洲/伦敦”时,时间更改为03-12-2011 06:57:12(实际时间02-12-2011 23:57:12

date/hwclock --show 返回的时间是正确的(03-12-2011 01:57:12 系统时区设置为里加)

操作系统:Debian 6.0

我已经检查了关于 SO/Google 上类似问题的大部分问题,但它们似乎都指定了错误的时区。

据我所知,php -> os 之间存在问题。 当然,因为不正确的时间偏移总是恒定的,我可以减去差异,但这不是一个合适的解决方案。

任何想法将不胜感激。

【问题讨论】:

  • 您的date() 值是什么?例如date('Y-m-d H:i:s')
  • 如果您使用DateTime 类来确定日期,并结合DateTimeZone 会发生什么?例如$d = new DateTime('', new DateTimeZone('Europe/Riga')); echo $d->format('Y-m-d H:i:s');

标签: php date time system


【解决方案1】:

阅读 PHP 手册似乎date.timezone 的行为受 php.ini 中的设置影响。 还有另一种方法可以在所有日期/时间函数中设置默认时区,它是date_default_timezone_set。尝试设置它:

date_default_timezone_set('Europe/Riga');

而不是您的 date.timezone 代码。

【讨论】:

  • 谢谢。但是我已经尝试过了,但没有成功。当我将时区从里加更改为伦敦时,时差为 2 小时这一事实表明时区选择“有效”,但问题在于初始时间值。
【解决方案2】:

这个问题看起来与我在我的一台服务器上看到的类似。看起来喜欢bug in php 5.3.2-1。尝试运行错误报告中的 php 脚本并发布结果。

【讨论】:

  • 似乎这不是一个实际的错误。记者只是有其他代码正在重置默认时区。从某种意义上说,您应该注意这一点。注意可能会产生影响的代码和 .ini 设置。
【解决方案3】:

系统的时区可能有误。这会导致 PHP date() 函数给出的时间发生变化,尽管 php date.timezone(在 php.ini 中)和服务器的系统时间都是正确的。

【讨论】:

    【解决方案4】:

    我也遇到了时区问题。这对某人来说很方便。

    就我而言,智利苏美尔时间 CLST 返回了错误的 timzeone 偏移量。

    更新 timezonedb 对我有用。

    转至:https://pecl.php.net/package/timezonedb

    对于 Widnows 下载最新版本的 dll,复制到“ext”目录。编辑 php.ini 并放入以下行:

    extension=php_timezonedb.dll

    适用于 Linux 您可以使用:

    pecl 安装时区数据库

    并在 php.ini 中输入:

    extension=php_timezonedb.so

    【讨论】:

      【解决方案5】:

      此评论针对阿塞拜疆时区

      我对 php 7.2 或 php 7.1 版本的“Asia/Baku”有疑问。

      我解决了问题更改为“欧洲/巴库”

      【讨论】:

        【解决方案6】:

        你必须在 php.ini 中设置 date.timezone 并重启你的服务器 http://php.net/manual/en/timezones.php

        【讨论】:

        • 这正是 OP 说date.timezone = "Europe/Riga" 时的意思。
        【解决方案7】:

        PHP 时间基于使用 GMT 和更高版本的 UTC 的纪元时间尺度。大多数人现在将其称为 unix 时间。因为 PHP 使用 unix 时间,所以不使用时区。我相信以秒为单位减去时区小时数是调整差异的正确方法。

        【讨论】:

        • Unix 时间是一个简单的计数,因为它是一个固定的时刻——它完全不受时区的影响。此外,PHP 有相当不错的时区处理;绝对没有理由跳过它并自己编写。
        猜你喜欢
        • 1970-01-01
        • 2020-03-24
        • 1970-01-01
        • 1970-01-01
        • 2012-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-04
        相关资源
        最近更新 更多