【问题标题】:Store a UTC date with PHP to MySQL使用 PHP 将 UTC 日期存储到 MySQL
【发布时间】:2012-10-03 07:56:45
【问题描述】:

我有一个移动应用和休息服务。移动应用程序将生成并向 Web 服务提供 UTC 日期时间和时区。我需要使用 php 将这两个值存储到 mysql 中。

我从远程源获取日期时间,所以我不能使用 mysql 的 UTC_TIMESTAMP() 来生成“当前”UTC 时间。

我有一个包含 2 列的表,创建 (DATETIME) 和时区 (VARCHAR)

在 PHP 中,我将收集以下内容:

$created = "2010-09-30 12:31:10"; //Actual UTC time
$timezone = "America/Los_Angeles"

INSERT 语句将如何存储 $created,原样 (UTC),而不将其存储为我的服务器的默认时区?

我是否必须在 PHP 中将其从 UTC 转换为我服务器的本地时间,或者它是否可以在 MySQL 中进行一些处理?

【问题讨论】:

    标签: mysql datetime utc


    【解决方案1】:

    据我所知,MySQL 不支持日期列上的时区信息,例如 PostgreSQL 就支持。

    为什么不能按原样存储日期?我相当肯定不会发生转换。而且,你为什么还需要时区信息?稍后在显示时将其转换为本地时间不是更相关吗?对于查看信息的特定用户?

    “当前时区设置不影响 UTC_TIMESTAMP() 等函数显示的值或 DATE、TIME 或 DATETIME 列中的值。这些数据类型中的值也不以 UTC 存储;时区仅适用于它们从 TIMESTAMP 值转换时。如果您想要 DATE、TIME 或 DATETIME 值的特定于区域设置的算术,请将它们转换为 UTC,执行算术,然后再转换回来。" source https://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

    意思是,MySQL 仅利用时区信息从 TIMESTAMP() 和类似函数返回本地时间,而不是用于插入或选择的数据的动态转换。

    【讨论】:

    • 我显示的是捕获时间的本地时间,而不是查看客户端(即浏览器)的时间或本地时间。 -哇,听起来很有趣:P
    • 好的,所以时间戳和mysql使用其设置的时区进行转换,但是datetime只是一个日期和时间,在保存或选择时没有转换?啊,刚看到你的更新...
    • 是的,错过了那部分,DATETIME 不受影响,TIMESTAMP 不受影响。我会说,将它作为 UTC 存储在具有单独时区的 DATETIME 中将是最好的选择,或者如果您只想将其显示为本地时区,则为时区时间。从 UTC 转换时,您还必须考虑最终的 DST,因此在这方面存储本地时间可能更容易。
    猜你喜欢
    • 2010-11-23
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2015-06-20
    • 2016-08-07
    • 1970-01-01
    • 2011-01-24
    • 2011-11-06
    相关资源
    最近更新 更多