【问题标题】:Converting GMT value for DateTimeZone?转换 DateTimeZone 的 GMT 值?
【发布时间】:2012-01-12 10:53:48
【问题描述】:

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

谢谢!

【问题讨论】:

  • 基于 GMT 偏移量的值不明确。给定的偏移量通常映射到多个时区。当跨越夏令时边界时,给定的偏移量可能会变得不适合使用。

标签: php datetime timezone


【解决方案1】:

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

PHP 的 DateTimeZone 似乎不接受 POSIX timezone strings,所以看起来你被预定义的时区困住了。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 2012-08-03
      • 2015-12-02
      • 1970-01-01
      • 2012-09-20
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多