【问题标题】:PHP + MySQL storing UTC timestamp vs datetimePHP + MySQL 存储 UTC 时间戳与日期时间
【发布时间】:2016-11-19 15:42:58
【问题描述】:

我正在努力在时间戳和日期时间之间做出决定。我确实找到了类似的问题,但没有一个给我明确的答案。

场景如下:

  1. 用户在他们的日历中创建一个事件(使用他们的时区)
  2. 事件随日期和时间(在某些“中立”时区)中持续存在
  3. 其他用户可以查看此事件(使用他们的时区)

我必须考虑 DST 和所有与日期和时间相关的事情。我认为日期应该存储在中立的 UTC 时区中。

所以我的问题是,是否有人可以为我提供他们在这种情况下使用的工作流程?

我在想,在 PHP 中我显然会使用 DateTime 并且:

  1. 用户创建一个事件 => 我在他的时区使用 DateTime -> 将其转换为时间戳 (getTimestamp) 并以这种方式持续存在
  2. 当某个用户想要查看该事件时 => 我从数据库中获取时间戳 -> 使用他的时区创建新的 DateTime 对象 -> 设置时间戳 (setTimestamp),这样就可以在他的时区中显示该时间

我的工作流程有什么缺点吗?

我将使用 Symfony 2,因此任何 Symfony 2 工作流程都是最好的,但除此之外,我将采取任何措施!

【问题讨论】:

    标签: php mysql symfony datetime timezone


    【解决方案1】:

    您的工作流程很好。

    当您需要满足多时区要求时,最好将时间存储在数据库中作为 utc 时间戳或 unix 纪元。 unix epoch 得到了很好的支持,我建议这样做。即使从客户端,您也可以将 unix epoch 发送到服务器,而不必担心时区。如果您使用 UTC 时间戳,则需要在时区之间进行转换。使用 unix epoch 它仍然是转换,但它非常简单,并且在大多数日期对象构造中得到很好的支持。

    当您需要检索和显示时间时,您将使用 unix epoch 和该用户的时区构造日期对象。

    【讨论】:

    • 我不知道你是否熟悉 Symfony2,但我发现了这个article,它有点过时但在开发中使用起来似乎很友好。将日期存储为日期时间(来自 UTC DateTime)并在需要显示到用户的时区时将其转换是否有任何缺点?
    • 太好了,我将使用这种方法,我认为应该简化整个工作流程,只需要一个我需要进行转换的点(因为 Symfony 将处理输入 => UTC 转换)我自己- 显示数据时。非常感谢。
    猜你喜欢
    • 2013-08-10
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 2012-07-24
    相关资源
    最近更新 更多