2016-03-03 84 views
0

我使用moment-timezone從moment.js時區與時刻,時區

moment.tz.names()

是給583項目檢查時區的列表,列表,非常詳細,非常巨大的,我怎麼可以讓主時區,所以我創建了一個下拉列表?

它是這樣的:

「非洲/阿比讓」, 「非洲/阿克拉」, 「非洲/亞的斯亞貝巴」, 「非洲/阿爾及爾」, 「非洲/阿斯馬拉」,「非洲/阿斯馬拉「非洲/巴馬科」, 「非洲/班吉」,「非洲/班珠爾」,「非洲/比紹」,「非洲/布蘭太爾」, 「非洲/布拉柴維爾」,「非洲/布瓊布拉」,「 「非洲/卡薩布蘭卡」,「非洲/休達」,「非洲/科納克里」,「非洲/達喀爾」, 「Africa/Dar_es_Salaam」,「Africa/Djibouti」,「Africa/Douala」, 「Africa/El_Aaiun「,」非洲/弗里敦「,」非洲/哈博羅內「, 」非洲/哈拉雷「Africa/Juba」, 「Africa/Kampala」,「Africa/Khartoum」,「Africa/Kigali」, 「Africa/Kinshasa」,「Africa/Lagos」,「Africa/Libreville 「Africa/Lome」, 「非洲/羅安達」,「非洲/盧本巴希」,「非洲/盧薩卡」, 「非洲/馬拉博」,「非洲/馬普托」,「非洲/馬塞盧」 「非洲/摩加迪沙」,「非洲/蒙羅維亞」,「非洲/內羅畢」, 「非洲/恩賈梅納」,「非洲/尼亞美」,「非洲/努瓦克肖特」, 「Africa/Ouagadougou」 Porto-Novo「,」Africa/Sao_Tome「, 」Africa/Timbuktu「,」Africa/Tripoli「,」Africa/Tunis「, 」Africa/Windhoek「,」America/Adak「 「America/Anguilla」,「America/Antigua」,「America/Araguaina」, 「America/Arge ntina/Buenos_Aires「,」America/Argentina/Catamarca「, 」America/Argentina/ComodRivadavia「,​​」America/Argentina/Cordoba「, 」America/Argentina/Jujuy「,」America/Argentina/La_Rioja「, 」America/Argentina/San_Juan「, 」America/Argentina/San_Luis「,」America/Argentina/Tucuman「, 」/阿根廷/ Mendoza「,」美國/阿根廷/ Rio_Gallegos「, 」America /美洲/阿根廷/烏斯懷亞「,」America/Aruba「,」America/Asuncion「, 」America/Atikokan「,」America/Atka「,」America/Bahia「, 」America/Bahia_Banderas「,」America/Barbados「 ,「America/Belem」, 「America /伯利茲」,「America/Blanc-Sablon」,「America/Boa_Vista」, 「America/Bogota」,「America/Boise」,「America/Buenos_Aires」,... .......

謝謝

+0

它使用[* IANA時區*](https://www.iana。組織/時區),列表就是列表。您可能會將其修整爲目前僅有的效果。 – RobG

回答

0

我不知道任何此類名單。畢竟,誰來決定哪些時區是「主要時區」?然而,一種選擇是做什麼的Microsoft Windows功能以及排序時區列表偏移:

screenshot

moment docs

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

會給你的特定區域的補償,例如,-05:00。您可以獲取每個區域的偏移量,按偏移量排序,然後顯示列表。列表中的文本可以是區域名稱,也可以是/之後的部分,_代替空格(例如,空格)。,America/New_YorkNew York)。

+0

但這不實際,下降如此巨大的數字! 583方式太多:( – sisimh

+0

呃,[timeanddate.com](http://www.timeanddate.com/worldclock/)默認顯示了一個「最受歡迎」的144列表,但我懷疑這個列表是手工挑選的。他們還提供了所有583的訪問權限。你可以問他們是否介意你使用他們的列表:)。好消息是[tz](https://www.iana.org/time-zones)名稱不會經常更改,所以如果您親自挑選了一個簡短列表,您可能不必更新它很長時間。 – cxw

0

正如大家所說,名單是名單。我做了什麼來縮小列表的範圍是使用具有用戶時區的會話變量,如果該變量爲空,則使用默認的美國/英國/南非/澳大利亞時區。對我的公司來說,這是我們大多數客戶的來源。奇怪的是,並不是很多加拿大人。

這些都是在PHP中,而不是JavaScript,但它不應該太難閱讀和計算出來。重要的是用於縮小結果的步驟。

這裏的要點是:

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

的output.html顯示您的默認時區擊穿是什麼。

最重要的文件是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(區域)

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

,是以2字母的國家代碼和查找它。最終的結果是用戶可以導航的結果小得多。我將它與choose.js結合起來,使它們能夠輸入縮寫縮小範圍。

您將不得不根據自己的用途調整此代碼,但希望它能告訴您如何去做。