带有时刻时区的时区

时间:2016-03-03 20:23:31

标签: javascript time momentjs

我正在使用来自moment.js的moment-timezone检查时区列表

moment.tz.names()

正在提供583项,列表非常详细且非常庞大,如何从中获取主要时区,以便创建下拉列表?

它是这样的:

  

"非洲/阿比让","非洲/阿克拉","非洲/ Addis_Ababa",   " Africa / Algiers"," Africa / Asmara"," Africa / Asmera"," Africa / Bamako",   " Africa / Bangui"," Africa / Banjul"," Africa / Bissau"," Africa / Blantyre",   "非洲/布拉柴维尔","非洲/布琼布拉","非洲/开罗",   "非洲/卡萨布兰卡","非洲/休达","非洲/科纳克里","非洲/达喀尔",   " Africa / Dar_es_Salaam"," Africa / Djibouti"," Africa / Douala",   " Africa / El_Aaiun"," Africa / Freetown"," Africa / Gaborone",   "非洲/哈拉雷","非洲/约翰内斯堡","非洲/朱巴",   "非洲/坎帕拉","非洲/喀土穆","非洲/基加利",   "非洲/金沙萨","非洲/拉各斯","非洲/利伯维尔","非洲/洛美",   "非洲/罗安达","非洲/卢本巴希","非洲/卢萨卡",   " Africa / Malabo"," Africa / Maputo"," Africa / Maseru"," Africa / Mbabane",   "非洲/摩加迪沙","非洲/蒙罗维亚","非洲/内罗毕",   " Africa / Ndjamena"," Africa / Niamey"," Africa / Nouakchott",   " Africa / Ouagadougou"," Africa / Porto-Novo"," Africa / Sao_Tome",   "非洲/廷巴克图","非洲/的黎波里","非洲/突尼斯",   "非洲/温得和克","美国/阿达克","美国/安克雷奇",   " America / Anguilla"," America / Antigua"," America / Araguaina",   " America / Argentina / Buenos_Aires"," America / Argentina / Catamarca",   " America / Argentina / ComodRivadavia"," America / Argentina / Cordoba",   " America / Argentina / Jujuy"," America / Argentina / La_Rioja",   " America / Argentina / Mendoza"," America / Argentina / Rio_Gallegos",   " America / Argentina / Salta"," America / Argentina / San_Juan",   " America / Argentina / San_Luis"," America / Argentina / Tucuman",   " America / Argentina / Ushuaia"," America / Aruba"," America / Asuncion",   " America / Atikokan"," America / Atka"," America / Bahia",   " America / Bahia_Banderas"," America / Barbados"," America / Belem",   " America / Belize"," America / Blanc-Sablon"," America / Boa_Vista",   " America / Bogota"," America / Boise"," America / Buenos_Aires",..........

谢谢

2 个答案:

答案 0 :(得分:0)

我不知道任何这样的清单。毕竟,谁决定哪个时区是"主要时区"?但是,一种选择是执行Microsoft Windows所做的操作,并按时区偏移对列表进行排序:

screenshot

来自moment docs

moment("2016-03-03").tz("America/Toronto").format('Z'); 

将为您提供该特定区域的偏移量,例如-05:00。您可以获取每个区域的偏移量,按偏移量排序,然后显示列表。列表中的文本可以是区域名称,也可以是/之后的部分,_替换为空格(例如America/New_York - &gt; New York)。< / p>

答案 1 :(得分:0)

正如大家所说,清单就是清单。我做的缩小列表的方法是使用具有用户时区的会话变量,如果为null,则使用默认的America / UK / South Africa / Australian时区。对于我的公司来说,这是我们大多数客户的来源。加拿大人不多,奇怪的是。

这完全是PHP,而不是JavaScript,但它不应该太难阅读和弄清楚。用于缩小结果范围的步骤非常重要。

这里是要点:

https://gist.github.com/NoMan2000/a262a96b159164882cd7

output.html显示默认的timeZone细分是什么。

最重要的文件是CountryCodesAndAbbr.php文件。

https://gist.github.com/NoMan2000/a262a96b159164882cd7#file-countrycodesandabbr-php

它有一个由JSON格式存储的五个不同国家ISO的数组。它发出一个CURL请求,用JSON响应,然后将其存储在一个文件中,这样我就不必每次都重新下载文件,并轰炸API。

出于我们的目的,只关心getContinentAndCountry方法,因为它包含我们需要的所有数据。这就是在javaScript中为您做的事情,对API的调用方式进行了一些调整。

TimeFormatter是一个用于处理PHP内部处理时区的方法的类,我需要在用户的国家代码和显示的时区之间进行转换,这样我就不会淹没它们。

在PHP中,我使用用户注册时获得的国家/地区,因此我有一个区域可以传入方法以缩小搜索范围。如果您没有保存会话变量或其他信息,请使用此API。

http://freegeoip.net

当您使用用户的IP向其发出请求时,这将为您提供该国家/地区。现在你有了这个国家。

如果您没有收到结果,那么请执行我的操作并默认使用您获得最多客户的地区,并选择<select>字段,以便他们选择国家/地区想。

您必须选择是否要使用IP,或者您是否有某种方式为用户获取价值。

最后,将国家/地区传递给TimeFormatter-&gt; getTimezonesByCountryCodeLookup(区域)

https://gist.github.com/NoMan2000/a262a96b159164882cd7#file-timeformatter-php

这需要2个字母的国家代码并进行查找。最终结果是您最终得到的结果要小得多,用户可以导航。我将它与selected.js结合起来,它使他们只需键入缩写即可缩小它。

您必须根据自己的需要调整此代码,但希望它能告诉您如何进行此操作。