PHP + MySQL存储UTC时间戳与日期时间

时间:2016-11-19 15:42:58

标签: php mysql symfony datetime timezone

我很难在时间戳和日期时间之间做出决定。我做了类似的问题,但没有一个给我一个明确的答案。

方案如下:

  1. 用户在其日历中创建活动(使用他们的时区)
  2. 活动充满了日期和时间(在某些"中立"时区)
  3. 另一位用户可以查看此活动(使用他们的时区)
  4. 我必须考虑夏令时和所有日期&时间相关的事情。我相信日期应该以UTC时区存储为中性。

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

    我原以为在PHP中我会明显使用DateTime并且:

    1. 用户创建一个事件=>我在他的时区中使用DateTime - >将其转换为timestamp(getTimestamp)并以此方式保持
    2. 当某个用户想要查看该事件=>我从数据库中获取时间戳 - >用他的时区创建新的DateTime对象 - >设置时间戳(setTimestamp),这样就可以在他的时区中显示该时间
    3. 我的工作流程有任何缺点吗?

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

1 个答案:

答案 0 :(得分:1)

您的工作流程很好。

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

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