PHP“其他时区”页面顶部的警告对于用户或开发人员为其应用程序选择特定时区是合理的。但是,这些警告缺乏上下文。具体来说:
该页面上列出的所有时区仍然是有效的 IANA 时区标识符。他们现在工作,他们将在未来继续工作。
其中大部分是Link
IANA 数据库中的条目,指向当前的规范Zone
条目。例如,Asia/Calcutta
是指向 的链接Asia/Kolkata
。两者都是有效的,可以在 PHP 和其他系统中使用。
除了极少数例外,IANA 区域名称实际上从未被“弃用”,它们只是降级为链接并变得不规范。当我将该列添加到Wikipedia 表时,我应该选择更好的措辞。(是的,那是我。也许我可以更新它。)
一个罕见的例外是Canada/East-Saskatchewan
,在 IANA 2017c 中完全删除,因为它的字符串长度很长并且很少使用。如果您的数据库中有此内容,请将其替换为America/Regina
.
另一个罕见的例外是US/Pacific-New
,在 IANA 2020b 中完全删除,因为它造成了很多混乱。它从来都不是一个真正的时区,而只是一个链接。如果您的数据库中有此内容,请将其替换为America/Los_Angeles
.
Etc/UTC
是标准的 UTC 时区。在大多数情况下,在服务器上设置默认时区时应该继续使用它。它不会以任何方式被弃用。
以Etc/GMT+
或Etc/GMT-
为非领土水域海上船舶的固定偏移规范区开始的区域。它们有时也用于其他边缘情况。它们不会以任何方式被弃用。它们的偏移量是有意反转的(Etc/GMT+12
= UTC-12)。
考虑到所有这些 - 您可以直接使用 CLDR Windows 区域映射文件的结果。除非您尝试提供规范的结果,否则您不需要对指向区域的链接进行任何额外的翻译。
此外 - 您可能不需要自己编写此代码。PHP 的国际化包可以通过添加extension=php_intl.dll
到您的php.ini
文件中来安装。然后,您可以使用诸如IntlTimeZone::getIDForWindowsID
执行映射之类的功能。它在后台使用相同的 CLDR 文件。