【问题标题】:PHP MYSQL convert timezone aware dates to UTCPHP MYSQL 将时区感知日期转换为 UTC
【发布时间】:2014-01-14 11:22:59
【问题描述】:

我正在开发一个现有的调度应用程序,它将约会日期/时间在 mysql 中存储为“2013-12-25 09:00:00”。没有考虑时区,因为到目前为止,该时间只是简单地发送到前端并以某种基本方式显示。现在,我想构建一些功能,例如“在应用程序前 X 小时发送提醒”。显然,要做到这一点,我需要知道时区以确定我是否比 appt 早 X 小时。

我现在不确定从哪里开始。在不知道时区的情况下如何将现有日期转换为 UTC?如果我确实从我的用户那里收集了时区信息,我将如何将现有的 mysql 日期时间格式转换为 UTC?我对使用 UTC 日期的一般往返工作流程也有疑问。以下是我认为它的工作原理:

  1. 以 UTC 格式存储所有日期
  2. 以 UTC 格式将所有日期传递给客户端
  3. 让客户端为用户申请偏移量

创建新约会时:

  1. 根据用户偏移量将日期/时间转换为 UTC
  2. 以 UTC 存储
  3. #1 重启进程

这是准确的吗?感谢您的帮助,想正确执行此操作,但不确定从所有这些现有应用程序开始,也没有时区信息:)

【问题讨论】:

标签: php mysql date datetime


【解决方案1】:

MySQL 的TIMESTAMP 数据类型(与其DATETIME 不同)在内部以UTC 格式存储。它和客户端的time_zone 之间的转换是在从客户端接收数据/向客户端发送数据时执行的:只需在会话开始时设置该变量即可:

SET time_zone = <strong><em>'GMT'</em></strong>;

至于转换现有时间,可以利用MySQL的CONVERT_TZ()函数:

UPDATE <strong><em>my_table</em></strong> SET <strong><em>my_column</em></strong> = CONVERT_TZ(<strong><em>my_column</em></strong>, <strong><em>'GMT'</em></strong>, <strong><em>'MET'</em></strong>);

MySQL Server Time Zone Support 下阅读更多内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2011-01-06
    • 1970-01-01
    • 2021-03-01
    相关资源
    最近更新 更多