PHP时区转换器



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

date_default_timezone_set('Europe/London');

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

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

这并不是唯一的问题,因为时区名称太多了,不同时区的名称多达数百个。我不确定那几百个该用哪一个,因为我显然不能全部用,因为那样会有点多余和低效。我会使用像GMT+5 or GMT-1这样的时区,但PHP手册说我不应该使用它们,而且据我所知,它们不支持DST。我想知道我应该怎么做才能得到一个好的时区列表,这对我的目的来说是有益的。或者,如果有人足够友善,他们可以把我转发到一个我可以使用的列表中。

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

TL;DR我需要帮助来确定时区投递箱使用的时区。

如果为每个用户存储时区字符串(例如"欧洲/伦敦"),则可以将传入时间转换为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为您提供的解决方案比您所希望的要好得多

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

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

如果你想限制选择,可以考虑使用两个下拉菜单,第一个选择一个国家,第二个选择该国家内的时区。PHP有这样的函数,数据来自原始数据集中的zone.tab。

另一种选择是使用基于地图的时区选择器控件,例如javascript的控件。

相关内容

  • 没有找到相关文章

最新更新