如何在PHP中使用Olson时区数据库?

时间:2011-01-31 01:05:26

标签: php

特别是,我想写一个PHP(-MySQL)脚本,它可以找到世界上某个特定城市的当前本地日期和时间。它必须尊重DST的变化。首先,我想找到世界上所有首都的当前日期和时间。不幸的是,我无法弄清楚如何使用Oslon数据库来完成任务。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

大约一年前,我在PHP中使用TimeZones,但从未认真对待过。但是,我写了一些代码,现场演示+下载可用here(< 300K)。

截图

enter image description here

是的,它遵守DST规则。

答案 1 :(得分:0)

TL; DR:使用PECL的timezonedb和内置DateTimeZone。如果您希望真正最新的时区更新,请参阅Upgrading Olson tz database natively implemented in PHP

  1. PHP DateTimeZone class中使用的内置时区数据库基于Olson。可能是旧的版本,这对于不断变化的时区信息很敏感。

  2. 官方PHP使用最新时区数据的方式是安装和升级PECL的timezonedb

    pecl upgrade timezonedb
    

    此软件包通常会更新到IANA(读取Olson)时区数据库的最新版本,对于大多数情况来说,该数据库应该足够好了。

  3. 如果您希望生活在时区数据库的最前沿,即想要查看Olson时区数据库官方版本中尚未包含的时区更新,您可以使用当前维护者的github等来源( https://github.com/eggert/tz)获取最新的时区数据。例如,截至2017年2月,蒙古在2017年取消DST未包含在最新版本(2016j)中,但它包含在上面的github链接中。

    但要在PHP中使用它,您需要重新编译timezonedb扩展名。请参阅Upgrading Olson tz database natively implemented in PHPhttps://github.com/derickr/timelib,了解从前沿数据中重新编译/更新PECL的timezonedb的方法(甚至可能包括您自己的自定义补丁)。它包含生成timezonedb.h的代码,然后用于将最新数据编译到timezonedb PECL包中。