2012-01-12 46 views
1

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

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

我已经看过成支持时区上http://us3.php.net/manual/en/timezones.php但有这么多的人,我不希望用户浏览整个列表。

是否有一种简单的方法来转换GMT+1:00,GMT-4:30或为DateTimeZone()的正确值。

还是像我在这里找到它更好地使用数组列表:Convert selected time and timezone to a set timezone

是它更好地使用UTC或GMT一般用户挑选?

谢谢!

+1

基于GMT-offset的值不明确。给定的偏移量通常映射到几个时区。当他们的夏令时边界被越过时,给定的偏移可能会变得不正确。 – salathe 2012-01-12 11:59:10

回答

1

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

PHP的DateTimeZone似乎不接受POSIX timezone strings,所以它看起来像你卡在预定义的时区。

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

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

1

我不认为有另一种方式来传递时区。我认为PHP中使用的时区必须是基于位置的,以确定DST设置和偏移量。

但是,您仍然可以向用户展示GMT+1:00等选项。你可以缩小列表的范围,只使用太多的选项(UTC,GMT,PST等)。