【问题标题】:PHP Timezone ChangerPHP 时区转换器
【发布时间】:2013-12-20 22:11:45
【问题描述】:

在 PHP 中,您可以通过简单的代码行更改时区

date_default_timezone_set('Europe/London');

我遇到的问题是制作基于用户的时区更改器。我想让用户使用带有时区选项的下拉框,并使用 MySQL 将其保存在用户的数据变量中。我的问题与 PHP 如何处理时区有关,特别是与每个变量的名称有关。具有如下名称的时区已经足够令人困惑了。

  • 欧洲/伦敦
  • 亚洲/上海
  • 美国/道森

这不是唯一的问题,不同时区名称的数量如此之多,达到数百个。我不确定这数百个该使用哪一个,因为我显然不能全部使用它们,因为那样会有点多余和低效。我会使用像GMT+5 or GMT-1 这样的时区,但PHP manual 说我不应该使用它们,而且从我读到的内容来看,它们不支持 DST。我想知道我应该怎么做才能获得一个对我的目的有益的时区列表。或者,如果有人足够好,他们可以将我转发到我可以使用的列表。

我正在寻找可以涵盖大多数时区的任何列表。

TL;DR我需要帮助来确定时区下拉框要使用的时区。

【问题讨论】:

  • 我相信大多数人都觉得+0700CESTEurope/London 更令人困惑。当我以某种形式找到像GMT+5 这样的东西时,我永远不知道该回答什么:我的国家/地区每年在GMT+1GMT+2 之间交换两次,但我知道我的时间与首都相同(尽管我没有'住在那里)。无论如何,您必须澄清您想要什么样的列表,否则这个问题将被关闭为“主要基于意见”。
  • "GMT+X" 衡量一个地区当前与 GMT 时间有多少小时的偏差。这并没有说明它是什么时区,因为这个偏移量每年会在每个地方发生几次变化。这就是时区存在的原因,它指定了何时发生这种情况的规则。觉得单子太长就去各地投诉吧。

标签: php mysql date timezone


【解决方案1】:

如果您为每个用户存储一个时区字符串(例如“欧洲/伦敦”),您可以将传入时间转换为 UTC,然后在显示时重新转换它们。一旦你弄清楚了,这很容易:

    $previoustz = date_default_timezone_get();
    @date_default_timezone_set( $users_chosen_timezone );
    /* do your time processing here */
    @date_default_timezone_set( $previoustz );

您必须始终遵守纪律,否则您的系统会显示一些错误时间的错误。

至于提供哪些时区的问题,我强烈建议您提供 PHP 提供的完整列表。您只需在用户配置文件屏幕中从用户那里收集时区设置,因此您不会经常用长长的下拉列表来骚扰用户。

出于几个原因,您需要它们。一是美国时区的普遍怪异,一些地方司法管辖区对夏令时做了奇怪的事情。查看美国/印第安纳州。这是立法机关曾经将 π 的值定为 3 的状态。你想弄清楚这一切吗?我不这么认为。

第二个原因是:一些司法管辖区在难以自动化的日期从夏令时来回切换。例如,以色列国根据希伯来历切换。您希望您的用户简单地选择他们的时区。

另一个原因是:使用 WordPress 等全球系统的人们已经开始期待标准的选择集,这些选择基于古老的 Unix/Linux 系统,称为 timezoneinfo。如果您只是遵循标准,则可以让 timezoneinfo 人员负责您应该提供哪些选择。这是一个国际电子政治问题,timezoneinfo 为您处理的比您希望的要好得多。

查看http://www.php.net/manual/en/datetimezone.listidentifiers.php 获取列表的方法。

【讨论】:

    【解决方案2】:

    您应该了解 PHP 时区是 IANA 标准时区。它们不是 PHP 专有的,用户可能已经习惯了(可能)看到它们。

    如果您想限制选择,请考虑使用两个下拉菜单,第一个选择国家,第二个选择该国家的时区。 PHP有这方面的功能,数据来自原始数据集中的zone.tab。

    另一种方法是使用基于地图的时区选择器控件,例如this one for javascript

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-05
      • 2011-01-31
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      相关资源
      最近更新 更多