如何解决转换已弃用的时区php
我正在将Windows时区映射到IANA,请使用此来源https://www.php.net/manual/fr/function.empty.php
但是问题在于,对于其中的一些人,只有过时的PHP列表https://raw.githubusercontent.com/unicode-org/cldr/master/common/supplemental/windowsZones.xml中的IANA名称
"Dateline Standard Time" "Etc/GMT+12"
"Greenland Standard Time" "America/Godthab"
"India Standard Time" "Asia/Calcutta"
"Nepal Standard Time" "Asia/Katmandu"
对他们来说合适的选择是什么?
解决方法
您可以尝试从此文件中解析和映射它们:
https://github.com/eggert/tz/blob/2017b/backward
,另一个选择:
-
使用https://wikitable2csv.ggor.de/可以从此表https://en.wikipedia.org/wiki/List_of_tz_database_time_zones中获取csv文件。 我认为这些数据不会很快更改,因此您可以下载一次并保存在项目中。
-
如果查看
status
列,您可能会发现可能存在Canonical
或Alias
值。 -
如果此列为别名,则应从
Notes
列中获取规范时区的名称。 如果列是规范的-就这样 -
从重复项中过滤结果
这样,我认为您不会有空值
,对于用户或开发人员为其应用程序选择特定时区,PHP "other time zones" page顶部的警告是合理的。但是,警告缺少上下文。具体来说:
-
该页面上列出的所有时区仍然是有效的IANA时区标识符。他们现在工作,将来会继续工作。
-
其中大多数是IANA数据库中的
Link
条目,它们指向当前的规范Zone
条目。例如,Asia/Calcutta
是指向Asia/Kolkata
的链接。两者都是有效的,并且可以在PHP和其他系统中使用。 -
只有两个极少数的例外,IANA区域名称实际上从未被“弃用”,它们只是被降级为链接而变得不规范。当我将该列添加到the Wikipedia table时,我应该选择更好的措词。 (是的,就是我。也许我可以更新它。)
-
一个罕见的例外是
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区域映射文件的结果。除非您要尝试提供规范的结果,否则无需对区域链接进行任何其他转换。
此外-您可能不需要自己编写此代码。可以通过将extension=php_intl.dll
添加到php.ini
文件中来安装PHP的Internationalization Package。然后,您可以使用类似IntlTimeZone::getIDForWindowsID
的函数来执行映射。它在后台使用相同的CLDR文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。