PHP MYSQL将时区感知日期转换为UTC

时间:2013-12-26 20:45:28

标签: php mysql date datetime

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

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

  1. 以UTC格式存储所有日期
  2. 以UTC格式将所有日期传递给客户
  3. 让客户为用户应用偏移量
  4. 创建新约会时:

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

      这准确吗?感谢您的帮助,想要正确地做到这一点,但不知道从哪里开始使用所有这些现有设备,并且没有时区信息:)

1 个答案:

答案 0 :(得分:1)

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

SET time_zone = 'GMT';

至于转换现有时间,您可以使用MySQL的CONVERT_TZ()功能:

UPDATE my_table SET my_column = CONVERT_TZ(my_column, 'GMT', 'MET');

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