正在转换DateTimeZone的GMT值


Converting GMT value for DateTimeZone?

我目前正在使用它将时间戳转换为用户定义的时区。我的问题是DateTimeZone()需要像Europe/ViennaAmerica/Chicago:这样的时区

$date = new DateTime("@".$timestamp);
$date->setTimezone(new DateTimeZone("America/Chicago"));

我已经查看了上支持的时区http://us3.php.net/manual/en/timezones.php但它们太多了,我不希望用户浏览整个列表。

有没有一种简单的方法将例如GMT+1:00GMT-4:30GMT+5:45转换为DateTimeZone()的正确值。

还是最好使用我在这里找到的数组列表:将选定的时间和时区转换为设置的时区

一般来说,使用UTC还是GMT让用户选择更好?

谢谢!

您可能应该获得用户的真实时区(从完整列表中选择)。仅使用UTC的静态偏移量,将无法遵循用户所在位置的正确夏令时规则。

PHP的DateTimeZone似乎不接受POSIX时区字符串,所以看起来您被预定义的时区卡住了。

查看/usr/share/zoneinfo/Etc。这里有一组为UTC加上和减去一个整数而预定义的时区。唯一的问题是+和-的意义与正常的约定相反。例如,只需使用"Etc/GMT-9"作为偏移量为+0900的通用时区。

这并不能处理所有可能的时区,比如尼泊尔奇怪的+0545,但它看起来是最好的选择,很容易访问。

我认为没有其他方法可以通过时区。我认为PHP中使用的时区必须基于位置来确定DST设置和偏移量。

但是,您仍然可以将选项作为GMT+1:00等呈现给用户。您可以将列表缩小到仅常用选项(UTC、GMT、PST等)。