【问题标题】:PHP datetime returned from mysql is wrong从mysql返回的PHP日期时间是错误的
【发布时间】:2018-02-02 18:34:08
【问题描述】:

从 mysql 表中获取日期时间列时,我遇到了这种奇怪的行为。

这是场景:

通知表中有一个日期时间列,其中存储的日期和时间是正确的。

但是当我从 php 查询数据库时,我得到了错误的时间(UTC + 0:00,应该是 UTC - 05:00) 我的系统时区是 UTC - 05:00。

即使是 PHP 的日期函数也能返回正确的日期和时间。

我在下面附上了 3 张图片,显示了来自服务器、MySQL 和 PHP(有问题)的时间

我更改了系统时区,mysql时区和php时区,但问题仍然存在。

服务器是 ubuntu 机器上带有 php 7.0 的 nginx。

请帮我解决问题。

【问题讨论】:

  • 你确定时区是为 php 和 mysql 设置的吗?不依赖系统时间,还有什么配置?
  • php 和 system 都是 America/New_York 而 mysql 是 utc-5:00
  • 确保 php 和 mysql 服务器具有相同的时区,这是时区问题而不是 php 或 sql 查询问题
  • 您确定 reply_on 字段是日期时间而不是时间戳,它始终是 UTC?
  • 请在此处以纯文本形式发布代码、错误、示例数据或文本输出,而不是难以阅读的图像,不能复制粘贴以帮助测试代码或在答案中使用,并且对使用屏幕阅读器的人怀有敌意。您可以编辑问题以在问题正文中添加代码。使用{} 按钮来格式化任何代码块,或者使用四个空格缩进以获得相同的效果。 我们无法将您的屏幕截图作为代码运行。您的屏幕截图一团糟,而且这种编辑无论如何也没有效果。

标签: php mysql datetime nginx ubuntu-16.04


【解决方案1】:

时区是您可以在系统中处理的最烦人的事情之一。根据经验,我总是确保所有服务器/容器/配置/等都设置为 UTC 并将 UTC 保存到数据库中。如果您需要显示其他内容,您可以将帐户/用户时区存储在数据库中并在显示信息之前对其进行转换。

令人惊讶的是,我参与的许多项目都使用 PST/PDT 作为时区,这会导致大量问题。

另外,我建议使用 Carbon 作为 PHP 中 DateTime 对象的帮助库。 https://github.com/briannesbitt/Carbon

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2014-08-05
    相关资源
    最近更新 更多