您好,登錄后才能下訂單哦!
JavaScript沒有短缺Date()
自從該對(duì)象在很多生命周期前就被引入以來,相關(guān)的冒險(xiǎn)就開始了,盡管它們?cè)诤艽蟪潭壬暇窒抻跈z索和操作用戶系統(tǒng)的本地時(shí)間。使用JavaScript獲取特定位置的日期和時(shí)間一直是一件難以捉摸的事情,因?yàn)?code>Date對(duì)象本身就對(duì)用戶計(jì)算機(jī)的時(shí)間進(jìn)行操作。當(dāng)有Date
方法,例如Date.getTimezoneOffset()
和Date.getUTCDate()
以幫助我們獲得世界時(shí)間,從這里開始,在復(fù)雜的國(guó)際時(shí)間規(guī)則世界中航行,比如在特定時(shí)區(qū)的夏令節(jié)約時(shí)間,然后我們才能可靠地到達(dá)彩虹的盡頭,也就是世界上某個(gè)特定地點(diǎn)的時(shí)間,這是一個(gè)滑坡路。我們需要的是一個(gè)時(shí)區(qū)數(shù)據(jù)庫(kù)和夏令節(jié)約時(shí)間規(guī)則,以消除僅依靠用戶的本地時(shí)間來獲得地球上特定位置的時(shí)間的所有復(fù)雜性和錯(cuò)誤性。那就是Google的時(shí)區(qū)API派上用場(chǎng):
洛杉磯時(shí)間:下午10:08:38 (Wed)
多倫多時(shí)間:上午1:08:38 (Thur)
AM
巴黎時(shí)間
Google的Timezone API提供一個(gè)簡(jiǎn)單的接口來獲取地球上任何位置的時(shí)區(qū)和DST(夏令時(shí))偏移量。要使用它,只需請(qǐng)求:
https://maps.googleapis.com/maps/api/timezone/json/?parameters
哪里“杰森“可以用字符串替換”XML“如果您希望返回的數(shù)據(jù)是XML格式,而不是JSON格式,那么parameters
應(yīng)包括以下3條信息:
Google時(shí)區(qū)API調(diào)用的預(yù)期參數(shù):
location
以逗號(hào)分隔的緯度和經(jīng)度元組(即:location=37.3711, -122.0375
),表示要查找的確切位置。
timestamp:
所需的日期和時(shí)間,以秒表示,從1970年1月1日午夜開始。API使用 timestamp
確定是否應(yīng)用夏令節(jié)余。1970年以前的時(shí)間可以表示為負(fù)值。
key:
應(yīng)用程序的API密鑰。這個(gè)免費(fèi)的密鑰是需要從您的網(wǎng)站向API提出請(qǐng)求。
我們將在下一節(jié)中詳細(xì)介紹如何定義前兩個(gè)參數(shù),盡管在此之前,您需要首先獲得一個(gè)GoogleAPI密鑰才能從您的站點(diǎn)訪問時(shí)區(qū)API。要做到這一點(diǎn),只需按照本頁。如果您已經(jīng)設(shè)置了一個(gè)API鍵,并且希望再次修改或撤回它,那么直接跳到Google控制臺(tái)頁面.
下面是一個(gè)完全正確的時(shí)區(qū)API調(diào)用字符串的示例加拿大溫哥華日期2016年11月4日:
https://maps.googleapis.com/maps/api/timezone/json?location=49.283436, -123.130429×tamp=1478880000&key=YOUR_API_KEY
返回的數(shù)據(jù):
例如,調(diào)用完成后,通過Ajax返回的數(shù)據(jù)以JSON字符串的形式出現(xiàn):
1 2 3 4 5 6 7 |
|
在加拿大溫哥華,2016年夏令時(shí)間將于3月13日至11月6日生效。由于所要求的日期2016年11月4日在這一范圍內(nèi),返回的數(shù)據(jù)反映了這一點(diǎn)。這,這個(gè),那,那個(gè)"dstOffset"
參數(shù)(以秒為單位)告訴我們?cè)摃r(shí)間和位置,DST(夏令節(jié))偏移量相對(duì)于世界時(shí)是1小時(shí)(3600秒)?!?code>rawOffset“屬性告訴我們此時(shí)區(qū)相對(duì)于世界時(shí)的標(biāo)準(zhǔn)偏移量(以秒為單位),撇開從任何夏令節(jié)余中抵消。
簡(jiǎn)而言之,任何位置的本地時(shí)間都是通過添加timestamp
“參數(shù)和返回的"dstOffset"
,和“rawOffset
“共同的價(jià)值觀。但這只是一個(gè)太簡(jiǎn)單的解釋,所以讓我們繼續(xù)挖掘。
讓我們把所有這些理論運(yùn)用到實(shí)際中去,得到世界上某一特定地點(diǎn)的當(dāng)前日期和時(shí)間。東京怎么樣?曾經(jīng)去過那里,愛過一切,除了昂貴的交通!我們需要東京的緯度和經(jīng)度坐標(biāo),加上當(dāng)前的世界日期和時(shí)間,從1970年1月1日午夜開始,世界協(xié)調(diào)時(shí)間為“timestamp
“參數(shù)以構(gòu)造相應(yīng)的時(shí)區(qū)請(qǐng)求:
1 2 3 4 5 6 |
|
讓我們來看看我們是如何導(dǎo)出上述值的:
-獲取位置的緯度和經(jīng)度
要使用GoogleMaps獲取位置的緯度和經(jīng)度,請(qǐng)?jiān)贕oogleMaps中輸入所需的地址(在本例中為“東京日本”)并按下進(jìn)入。然后右擊在地圖上的位置名稱(“東京”)上顯示上下文菜單。選擇并單擊菜單項(xiàng)“這是什么“拿出一張位置卡,上面顯示著它的緯度和經(jīng)度:
或者,您也可以使用類似于latlong.net得到那些神秘的數(shù)字。
-得到timestamp
任何日期的值
這,這個(gè),那,那個(gè)timestamp
Google時(shí)區(qū)API的參數(shù)期望所需的日期和時(shí)間從1970年1月1日午夜開始以秒為單位表示。對(duì)于當(dāng)前時(shí)間,計(jì)算方法是先實(shí)例化Date對(duì)象以獲取用戶計(jì)算機(jī)的當(dāng)前本地時(shí)間,然后使用以下方法添加UTC偏移量(以分鐘為單位)Date.getTimezoneOffset():
1 2 |
|
因?yàn)?code>timestamp參數(shù)應(yīng)該以秒為單位,我們做一個(gè)小的數(shù)學(xué)把當(dāng)前的日期和它的UTC偏移到那個(gè)單位。這里有一個(gè)時(shí)間戳,代表從1970年世界協(xié)調(diào)時(shí)1月1日午夜開始的時(shí)間和日期,正如醫(yī)生所吩咐的。
如果您感興趣的目標(biāo)日期不是當(dāng)前日期/時(shí)間,只需將特定日期字符串傳入new Date()
實(shí)例化它時(shí),例如:
1 |
|
這對(duì)于未來或過去的相關(guān)應(yīng)用都是有用的,比如追溯到2025年的圣誕節(jié)東京時(shí)間。見在這里實(shí)例化日期對(duì)象的各種方法.
在最后apicall
變量現(xiàn)在包含我們可以發(fā)出的Google時(shí)區(qū)請(qǐng)求,以獲取一些有用的信息:
1 |
|
現(xiàn)在,我們已經(jīng)準(zhǔn)備好使用Ajax來接電話,并使用前面構(gòu)建的請(qǐng)求字符串調(diào)用時(shí)區(qū)API。返回的數(shù)據(jù)為我們提供了東京的正確時(shí)區(qū)和DST偏移量,然后我們可以使用這些數(shù)據(jù)來確定該城市的正確日期和時(shí)間:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。