我正在使用来自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",..........
谢谢
答案 0 :(得分:0)
我不知道任何这样的清单。毕竟,谁决定哪个时区是"主要时区"?但是,一种选择是执行Microsoft Windows所做的操作,并按时区偏移对列表进行排序:
来自moment docs:
moment("2016-03-03").tz("America/Toronto").format('Z');
将为您提供该特定区域的偏移量,例如-05:00
。您可以获取每个区域的偏移量,按偏移量排序,然后显示列表。列表中的文本可以是区域名称,也可以是/
之后的部分,_
替换为空格(例如America/New_York
- > 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。
当您使用用户的IP向其发出请求时,这将为您提供该国家/地区。现在你有了这个国家。
如果您没有收到结果,那么请执行我的操作并默认使用您获得最多客户的地区,并选择<select>
字段,以便他们选择国家/地区想。
您必须选择是否要使用IP,或者您是否有某种方式为用户获取价值。
最后,将国家/地区传递给TimeFormatter-&gt; getTimezonesByCountryCodeLookup(区域)
https://gist.github.com/NoMan2000/a262a96b159164882cd7#file-timeformatter-php
这需要2个字母的国家代码并进行查找。最终结果是您最终得到的结果要小得多,用户可以导航。我将它与selected.js结合起来,它使他们只需键入缩写即可缩小它。
您必须根据自己的需要调整此代码,但希望它能告诉您如何进行此操作。