PHP中的时区

Wil*_*lco 4 php timezone date

PHP似乎使用一种相当烦人的方法来设置evnironment时区,使用区域名称而不是GMT偏移量.这使得时区下拉是一个巨大的痛苦,因为它要么必须是巨大的以容纳所有可能的PHP时区值,要么我必须找到一种方法将GMT偏移量转换为有效值以传递给PHP.

那么,给定GMT偏移量,我如何在PHP中设置时区?例如,我如何将GMT偏移值"-8.0"转换为我可以传递给的值date_timezone_set()

Jon*_*eet 17

使用区域名称是描述时区的正确方法.单独使用GMT偏移是非常模糊的.

这反映在您的问题中 - 如何将-8的GMT偏移量转换为时区?嗯,这取决于"GMT -8"的真正含义.这是指"UTC -8在每个时间点"还是表示"冬季时间为UTC -8,夏季时间为UTC -7"?如果是后者,冬天什么时候开始和结束?

希望 PHP接受一个众所周知的"固定"(无DST)时区值,例如"Etc/GMT + 3"等.但除非你真的,真的是指一个固定的时区,你是最好找出你实际谈论的是哪个区域,因为否则你的计算几乎肯定会在某些时候出错.

在去年的大部分时间里,我一直在和时区摔跤.他们很痛苦 - 特别是当一些区域改变他们的DST规则(就像美国几年前做的那样)或某些区域似乎随意选择进出DST.试图在一个数字中反映所有这些是愚蠢的.如果你只对一个瞬间感兴趣,它可能没问题 - 但是在那时你也可以只将UTC值存储起来.否则,名称是最好的方法.(请注意,这一点并不一定顺风顺水.即使名字随着时间而改变......)


Jef*_*ber 5

如果您使用的是PHP> = 5.2,则可以使用内置的DateTimeZone类方法listAbbreviations.

var_dump( DateTimeZone::listAbbreviations() );
Run Code Online (Sandbox Code Playgroud)