首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带时区的时区

带时区的时区
EN

Stack Overflow用户
提问于 2016-03-03 20:23:30
回答 2查看 1.9K关注 0票数 0

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

moment.tz.names()

是给583项目,列表是非常详细和巨大的,我如何才能从其中得到主时区,所以我创建了一个下拉列表?

事情是这样的:

“非洲/阿比让”、“非洲/阿克拉”、“非洲/亚的斯亚贝巴”、“非洲/阿尔及尔”、“非洲/阿斯马拉”、“非洲/阿斯美拉”、“非洲/巴马科”、“非洲/班吉”、“非洲/班珠尔”、“非洲/几内亚比绍”、“非洲/布兰太尔”、“非洲/布拉柴维尔”、“非洲/布琼布拉”、“非洲/开罗”、“非洲/卡萨布兰卡”、“非洲/休达”、“非洲/科纳克里”、“非洲/达喀尔”,“非洲/达累斯萨拉姆”、“非洲/吉布提”、“非洲/杜阿拉”、“非洲/厄尔尼诺”、“非洲/弗里敦”、“非洲/哈博罗内”、“非洲/哈拉雷”、“非洲/约翰内斯堡”、“非洲/朱巴”、“非洲/坎帕拉”、“非洲/喀土穆”、“非洲/基加利”、“非洲/金沙萨”、“非洲/拉各斯”、“非洲/利伯维尔”、“非洲/洛美”、“非洲/罗安达”,“非洲/卢本巴希”、“非洲/卢萨卡”、“非洲/马拉博”、“非洲/马普托”、“非洲/马塞卢”、“非洲/姆巴贝内”、“非洲/摩加迪沙”、“非洲/蒙罗维亚”、“非洲/内罗毕”、“非洲/恩贾梅纳”、“非洲/尼亚美”、“非洲/努瓦克肖特”、“非洲/瓦加杜古”、“非洲/波尔图-新”、“非洲/圣多美”、“非洲/廷巴克图”、“非洲/的黎波里”,“非洲/突尼斯”、“非洲/温得和克”、“美洲/阿达克”、“美国/安克雷奇”、“美洲/安圭拉”、“美国/安提瓜”、“美国/阿拉瓜纳”、“美国/阿根廷/布宜诺斯艾利斯”、“美国/阿根廷/卡塔马卡”、“美国/阿根廷/ComodRivadavia”、“美国/阿根廷/科多巴”、“美国/阿根廷/朱里”、“美国/阿根廷/拉里奥亚”、“美国/阿根廷/门多萨”,“美洲/阿根廷/里奥-加列戈斯”、“美国/阿根廷/萨尔塔”、“美国/阿根廷/圣胡安”、“美国/阿根廷/圣路易斯”、“美国/阿根廷/图库曼”、“美国/阿根廷/乌斯怀亚”、“美国/阿鲁巴”、“美国/亚松森”、“美国/奥蒂科坎”、“美国/阿特卡”、“美国/巴伊亚伊亚”、“美国/巴巴多斯”、“美国/贝伦姆”、“美国/伯利兹”,"America/Blanc-Sablon“、"America/Boa_Vista”、"America/Bogota“、"America/Boise”、“America/布宜诺斯艾利斯”、.

谢谢

EN

回答 2

Stack Overflow用户

发布于 2016-03-03 20:35:31

我不知道有这样的名单。毕竟,谁来决定哪些时区是“主要时区”?但是,一种选择是执行Microsoft Windows所做的操作,并按时区偏移量对列表进行排序:

来自力矩医生

代码语言:javascript
复制
moment("2016-03-03").tz("America/Toronto").format('Z'); 

将给出该特定区域的偏移量,例如,-05:00。您可以获得每个区域的偏移量,按偏移量排序,然后显示列表。列表中的文本可以是区域名称,也可以是/之后的部分,用空格代替_ (例如,America/New_York -> New York)。

票数 0
EN

Stack Overflow用户

发布于 2016-03-03 21:16:09

正如每个人都说过的,清单就是清单。为了缩小列表范围,我所做的是使用具有用户时区的会话变量,如果为空,则使用默认的美国/UK/南非/澳大利亚时区。对我公司来说,这是我们大多数客户的来源地。不是很多加拿大人,奇怪的是。

所有这些都是用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->getTimezonesByCountryCodeLookup(region)。

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

这是两个字母的国家代码,并查找它。最终的结果是用户可以导航的结果要小得多。我把它和chosen.js结合在一起,它使他们只需输入缩写就可以缩小范围。

您将不得不根据您自己的使用来调整这段代码,但希望它向您展示如何执行它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35782275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档