php - php时区会一直存在吗?

标签 php timezone timestamp-with-timezone

我正在尝试将 PHP 的日期时间和时区功能集成到我的应用程序中。我现在正在做的事情:

  • 每个时间都作为 Unix 时间戳存储在数据库中
  • 每次操作都是使用时间戳完成的
  • 它唯一以用户友好的格式存在的时候是在向用户显示时

是的,我知道 MySQL 有一个内部日期时间原始对象,但我不完全理解它是如何工作的,而且以这种格式存储时间似乎很痛苦。

我还编写了自己的非常简单的时区库,其中包含文字 (-12, 11) 小时偏移量,并为每个偏移量分配了一些友好的名称。这应该稍后更改为完整的时区库,因为我知道创建新时区库的痛苦( https://www.youtube.com/watch?v=-5wpm-gesOY )。我已经尝试过 PHP 的内部时区库,一切似乎都运行良好。

PHP 提供了一个规范的时区列表,可以通过 DateTimeZone::listIdentifiers() 访问。我有点期望 PHP 本身会与一些外部计时数据库进行通信,以便在任何国家/地区更改其时区详细信息时动态更改时区。我的问题是,这真的会发生吗?如果确实发生这种情况,是否可以保证特定时区(例如美国/危地马拉)随着时间的推移仍会被 PHP 识别,并且在时区更改时不会抛出错误?

最佳答案

PHP 时区基于 IANA TZ Database ,并通过 the timezonedb PECL package 发送。截至本文发布时的当前版本是 2019.3,与 IANA's 一致当前 2019c 版本。 timezonedb 包由 Derick Rethans 维护自 2005 年以来,虽然没有任何保证,但没有理由相信他或其他人 PHP core contributor不会无限期地继续此维护。

请注意,每个 PHP 版本都包含发布时最新版本的 timezonedb。所以大多数情况下你不需要自己更新软件包。只需让您的 PHP 实例保持最新版本即可,您将获得最新的时区数据。

future 更改为 America/Guatamala 的示例将在 TZ database discussion list 中向上游处理本身。该项目是核心关键互联网基础设施,受 IETF BCP 175 / RFC 6557 管辖。 。该项目过时的风险几乎为零,因为几乎每个主要操作系统、编程平台以及无数的库和独立项目都依赖它。

就您的自定义库而言,很高兴您观看了 Computerphile 视频,但您还应该阅读 time timezone tag wiki在 Stack Overflow 上 - 特别注意标记为“Time Zone != Offset”的部分。为固定偏移量分配一个友好的名称是不够的,因此需要维护时区及其随时间变化的数据库。

从视频中重申,请不要使用自定义时区实现 - 依赖他人的工作会更好。在本例中 - 使用 PHP 内置的时区功能。

关于php - php时区会一直存在吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60743036/

相关文章:

php - while 循环不显示从数据库收集的所有数据

javascript - 从 javascript 到 php 的具有多个数组的数组

database - 错误 : invalid value for parameter "TimeZone": "Canada/East-Saskatchewan"

ruby-on-rails - Rails 5 如何保存 postgres 中两个日期时间之间的小时和分钟差异?

javascript - 我想在 JavaScript 中更改日期对象的时区

php - 如何写... 5 个字符后

php - 在 Woocommerce Checkout 上删除一个国家的特定州

localization - Moment.js - 时区语言(本地化)

c - 带有时区偏移量的 c 中的 strptime

javascript - 如何将 unix 时间戳转换为给定时区的日期+时间