转换DateTimeZone的GMT值?

时间:2012-01-12 10:53:48

标签: php datetime timezone

我目前正在使用它来将时间戳转换为用户定义的时区。我的问题是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()的正确值。

或者使用像我在这里找到的数组列表更好:Convert selected time and timezone to a set timezone

一般情况下,用户选择使用UTC或GMT会更好吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为没有其他方法来传递时区。我认为PHP中使用的时区必须是基于位置的,以确定DST设置以及偏移量。

但是,您仍然可以向用户显示GMT+1:00等选项。您可以将列表缩小到仅使用频繁的选项(UTC,GMT,PST等)。

答案 1 :(得分:1)

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

PHP的DateTimeZone似乎不接受POSIX timezone strings所以看起来你已经陷入了预定义的时区。

查看/usr/share/zoneinfo/Etc。有一堆时区预定义为UTC加上减去一个整数。唯一的问题是+和 - 的意义与正常惯例相反。因此,只需使用“Etc / GMT-9”作为偏移+0900的通用时区。

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