gpt4 book ai didi

php - 管理时区

转载 作者:可可西里 更新时间:2023-11-01 00:26:58 26 4
gpt4 key购买 nike

我看过许多时区/PHP 帖子,大多数建议以 UTC 格式存储日期时间字段,然后在存储和显示日期时间信息时使用应用程序用户时区偏移量。

我遇到的问题我继承了一个不支持时区的应用程序,现在我需要解决这个问题。

服务器已设置为 "EST +11:00 Australia/Melbourne",并且已经有应用程序从该服务器运行。所以我无法改变这一点。

幸运的是,我确实知道用户时区偏移量,即 -05:00 等。

应用程序获取 Javascript 日期并使用 PHP 的 strtotime() 函数解析它们并存储在 MySQL 数据库中,如下所示:

$event_starts = date('Y-m-d H:i:s', 
strtotime('Thu Dec 02 2010 11:15:00 GMT+1100 (AUS Eastern Daylight Time)');

考虑到服务器未设置为 UTC,是否有人对如何让此应用程序感知时区的最佳方式有任何建议?

非常感谢,J。

最佳答案

这不会很容易。

首先,考虑现有的存储日期是您服务器的本地时间,该时间遵守夏令时。除了现在或将来打印这些日期之外,任何必须对这些日期做任何事情的代码都需要先将它们转换为 UTC。如果夏令时规则在存储日期的时间点和当前时间(转换发生时)不完全相同,您的服务器将使用“当前”规则并因此产生错误的结果。诚然,这种情况在您的特定情况下可能牵强附会(或者可能再次如此),但这是一个非常强烈的警告,不要存储 UTC 以外的任何内容。

假设 DST 规则保持不变,并且您的 PHP >= 5.3.0,您可以这样做:

  1. 使用 DateTime::createFromFormat 读取“原始”数据库日期,明确指定时区(服务器的 TZ)
  2. 使用 DateTime::setTimezone 转换为用户本地时间(指定用户的 TZ)
  3. 向用户展示

当接收到用户输入时,你需要做相反的事情:

  1. 使用 DateTime::createFromFormat 创建用户本地时间日期,明确指定时区(用户的 TZ)
  2. 使用 DateTime::setTimezone 转换为服务器本地时间(指定服务器的 TZ)
  3. 存储在数据库中

除上述之外,我建议您在某个时候使您的应用程序脱机,并将数据库中的所有日期转换为 UTC。然后你就会摆脱之前讨论的问题(至少在未来,因为过去无法挽回)。我上面提到的“服务器的 TZ”将是 UTC(无论实际服务器是否设置为 AUS EDT,您的“工作”时区都将是 UTC)。

关于php - 管理时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4325716/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com