我目前正在使用它来将时间戳转换为用户定义的时区。我的问题是DateTimeZone()需要一个时区,如Europe/Vienna
或America/Chicago
:
$date = new DateTime("@".$timestamp);
$date->setTimezone(new DateTimeZone("America/Chicago"));
我已经在http://us3.php.net/manual/en/timezones.php查看了支持的时区,但有很多这样的时区,我不希望用户浏览整个列表。
是否有一种简单的转换方式,例如GMT+1:00
,GMT-4:30
或GMT+5:45
为DateTimeZone()的正确值。
或者使用像我在这里找到的数组列表更好:Convert selected time and timezone to a set timezone
一般情况下,用户选择使用UTC或GMT会更好吗?
谢谢!
答案 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,但看起来它是最容易获得的选择。