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

标签 php mysql symfony datetime timezone

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

场景如下:

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

我必须考虑夏令时以及所有与日期和时间相关的事情。我认为日期应该存储在 UTC 时区中,保持中立。

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

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

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

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

我将使用 Symfony 2,因此任何 Symfony 2 工作流程都是最好的,但除此之外我会接受任何东西!

最佳答案

您的工作流程很好。

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

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

关于PHP + MySQL 存储 UTC 时间戳与日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40694746/

相关文章:

php - 在选择可用房间时使用 MySQL 查询

mysql - Phing pdosqlexec 段错误

PHP:已连接到数据库,但 mysql_query 失败

Symfony AutoWire 多个服务同一类

php - 打字错误3 : Add LINK tags to CSS Files in the HEAD tag from within a Typo 3 extension

php - WooCommerce 在前端自定义日期后显示产品总销售额

php - fatal error : Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

c# - 在 WHERE 子句中具有多个条件的 LINQ 查询

php - 我的 Symfony 路由抛出 404?

symfony - 如何在 Twig 扩展中呈现 Controller 操作?