Jon*_*eet 17
使用区域名称是描述时区的正确方法.单独使用GMT偏移是非常模糊的.
这反映在您的问题中 - 如何将-8的GMT偏移量转换为时区?嗯,这取决于"GMT -8"的真正含义.这是指"UTC -8在每个时间点"还是表示"冬季时间为UTC -8,夏季时间为UTC -7"?如果是后者,冬天什么时候开始和结束?
我希望 PHP接受一个众所周知的"固定"(无DST)时区值,例如"Etc/GMT + 3"等.但除非你真的,真的是指一个固定的时区,你是最好找出你实际谈论的是哪个区域,因为否则你的计算几乎肯定会在某些时候出错.
在去年的大部分时间里,我一直在和时区摔跤.他们很痛苦 - 特别是当一些区域改变他们的DST规则(就像美国几年前做的那样)或某些区域似乎随意选择进出DST.试图在一个数字中反映所有这些是愚蠢的.如果你只对一个瞬间感兴趣,它可能没问题 - 但是在那时你也可以只将UTC值存储起来.否则,名称是最好的方法.(请注意,这一点并不一定顺风顺水.即使名字随着时间而改变......)
如果您使用的是PHP> = 5.2,则可以使用内置的DateTimeZone类方法listAbbreviations.
var_dump( DateTimeZone::listAbbreviations() );
Run Code Online (Sandbox Code Playgroud)