PHP:具有相同值的时区之间有什么区别吗


PHP: Is there any difference between timezones which have same value?

例如,伦敦、里斯本和都柏林都共享同一时间:

date_default_timezone_set('Europe/London');
echo date('D, d M Y H:i:s P');// Wed, 30 Dec 2015 13:30:51 +00:00
date_default_timezone_set('Europe/Lisbon');
echo date('D, d M Y H:i:s P');// Wed, 30 Dec 2015 13:30:51 +00:00
date_default_timezone_set('Europe/Dublin');
echo date('D, d M Y H:i:s P');// Wed, 30 Dec 2015 13:30:51 +00:00

如果时间相同,那么这些时区之间是否存在隐藏的差异?比如:日光,任何特殊的计算,任何特定的函数都会给出不同的结果,等等。或者不管怎样,都会完全一样?

我这么问是因为,例如,在巴林'Asia/Bahrain'是+03:00,而在卡塔尔'Asia/Qatar'也是+03:00,所以如果我把它设置为巴林或卡塔尔,真的有区别吗?

是的,不同时区之间有很多差异。PHP使用IANA/Olson时区数据库,也称为TZDB。您可以阅读更多关于tz数据库的信息:

  • 维基百科
  • 在主办IANA
  • 在tzdb本身的描述文件中
  • 在tzdb GitHub存储库中

特别是,您可以看到每个区域都有一个唯一的历史。虽然有些值在今天可能是相同的,但它们在过去可能有所不同,无论是从UTC偏移量,还是从一个偏移量到下一个偏移的转换日期(出于夏令时和其他原因),以及每个时期使用的缩写。

例如,以下是您询问的区域的tzdb中条目的链接。你会发现,从历史上看,它们是截然不同的。

  • 欧洲/伦敦
  • 欧洲/都柏林
  • 欧洲/里斯本

编号。。。他们是一样的。。。

PHP使用时区来计算日期和时间的差异。