之所以會這樣,是因?yàn)槲野l(fā)了一個SpringOne的通知,Spring的官方技術(shù)發(fā)布會。
請注意大會第一項的時間欄。上面寫著:
中部時間晚上9:00—10:00
也就是當(dāng)天晚上9點(diǎn)正式開始。
但是一個讀者的評論讓我思考。
我查了一下CST,時區(qū)的縮寫,可以代表下面這么多時區(qū)的縮寫:
中部時間:中部標(biāo)準(zhǔn)時間UTC—6:00
澳大利亞中部時間:中部標(biāo)準(zhǔn)時間UTC+9:30
中國標(biāo)準(zhǔn)時間:中國標(biāo)準(zhǔn)時間UTC+8:00
古巴標(biāo)準(zhǔn)時間:古巴標(biāo)準(zhǔn)時間UTC—4:00
我通過分析得出的結(jié)論是,如果美國時間晚上8點(diǎn)開始,整個會議大部分都在凌晨進(jìn)行,不太合理,所以我猜測應(yīng)該是中國時間,也就是中國標(biāo)準(zhǔn)時間UT+8:00。
我讓我的一個美國朋友訪問下面的頁面,果然,時間和我顯示的不一樣:
現(xiàn)在是太平洋時間早上6點(diǎn)到7點(diǎn)
PDT代表太平洋夏令時UTC—7:00太平洋夏令時。
我請我的一個英國朋友再來拜訪我,得到的答復(fù)是:
英國夏令時下午2點(diǎn)至3點(diǎn)
BST代表英國夏令時UTC+1:00。
我請我在德國的一個朋友再次來訪,得到的答復(fù)是:
CEST下午3點(diǎn)至4點(diǎn)
CEST代表中歐夏令時UTC+2: 00。
什么原則。
然后我想,原理應(yīng)該是請求頭加什么參數(shù)來標(biāo)識我的時區(qū)。
但是我搶到包之后,并沒有發(fā)現(xiàn)類似的參數(shù)。
然后我就想,那要根據(jù)我的要求IP來判斷。
于是我查了一下,發(fā)現(xiàn)無論我怎么切換vpn,顯示的時間都是CST和中國時間。
正當(dāng)我一籌莫展的時候,我問一位即將回國的英國朋友。他參觀后居然展示了中國時間!
中部時間晚上9:00—10:00
然后他說了一句話,一句驚醒夢中人的話他說他很快就要回中國為了提前適應(yīng),他把電腦的時區(qū)設(shè)置成了中國
原來如此!
我立即將我的時區(qū)調(diào)整為美國的太平洋時間。
重新打開瀏覽器,訪問SpringOne。
時間終于變成了太平洋時間,證明美國人從早上開始看這個發(fā)布會,然后持續(xù)了一整天我們中國是晚上開始看,然后要想趕上直播就需要熬夜
也證明了頁面顯示的時間和我的操作系統(tǒng)設(shè)置的時區(qū)有關(guān)。
追根究底,繼續(xù)探索。
話說回來,這個網(wǎng)站的H5頁面是怎么處理我系統(tǒng)的時間的。
我開始搶包。
首先,這肯定不是靜態(tài)頁面,所以一定是js動作。
在浩如煙海的js包中,我找到了一個名為schedule.js的,負(fù)責(zé)給這些時間賦值,一看就知道。
注意,getUnixTimestamp方法被廣泛用于獲取時間。
所以我在另一個js里找到了這個方法的定義,在core.min.js里
這個方法是壓縮的,格式化它,然后執(zhí)行關(guān)鍵信息,如下:
$ tz datetime:$ a . $ tz datetime . eachd . convert datetime)convert datetime:function(b)varc = b . dataset . datetimeoutvarh = moment . tz . guess()varc = b . dataset . datetimeoutgetunixtimestamp:function(b,c)returnmoment.tz(b,c"MM/DD/YYYYHH:mm ","America/New_York ")tz(h)
重點(diǎn)看這個功能。
varh=moment.tz.guess
該功能是與系統(tǒng)設(shè)置的時區(qū)進(jìn)行交互的關(guān)鍵它可以檢查你的時區(qū),這正是你的系統(tǒng)設(shè)置的時區(qū)
我將系統(tǒng)時區(qū)設(shè)置為美國太平洋時區(qū),在瀏覽器控制臺中執(zhí)行這段js代碼后,得到了以下結(jié)果:
moment . tz . guess, "美國/洛杉磯 "
我將系統(tǒng)時區(qū)設(shè)置為中國的北京時間,在瀏覽器控制臺中執(zhí)行這段js代碼后,得到了以下結(jié)果:
gt,gt,moment . tz . guess, "亞洲/上海 "
僅此而已這個js函數(shù)可以獲取我們系統(tǒng)設(shè)置的時區(qū),所以自然可以用系統(tǒng)時區(qū)動態(tài)改變頁面上的時間
怎么改就是通過剛才getUnixTimestamp的函數(shù)。
getUnixTimestamp:function return moment . tz(b,c"MM/DD/YYYYHH:mm ", "美國/紐約 ")tz(h)
我們知道H代表時區(qū),所以第一行tz是設(shè)置一個紐約時間的初始值,第二行tz轉(zhuǎn)換成我們系統(tǒng)設(shè)置的時區(qū),第三行valueOf最后可以轉(zhuǎn)換成時間戳。
我們就拿一個數(shù)值瀏覽器控制臺來執(zhí)行這個函數(shù)驗(yàn)證一下吧比如我們想看看2021—09—01 08:00紐約時間換算成北京時間是什么結(jié)果
力矩 gttz gttz(moment . tz . guess()) gt,
這個1630497600000是時間戳轉(zhuǎn)換工具轉(zhuǎn)換的,它是:
完美這個函數(shù)將紐約時間2021—09—01 08:00轉(zhuǎn)換為北京時間2021—09—01 20:00,剛好差1 2個小時沒問題
a類結(jié)果,轉(zhuǎn)換后的值填充在頁面上的標(biāo)簽tz—datetime下。
$ tz datetime:$ a . $ tz datetime . eachd . convert datetime)
是的,那是我們看見它的地方。
至此,這個問題終于得到了完美的解釋!
感謝這位讀者的提問,感謝世界各地的親朋好友的支持,讓我度過了一個愉快的探索下午,還有這篇隨機(jī)的文章!
我覺得還是做個技術(shù)人好,就是愿意花一個下午的時間去研究學(xué)習(xí),只為了解答自己心中的一個疑問,而得出結(jié)論后的那種快樂是我獨(dú)有的。
然后我就有了雙喜臨門,就是寫了一篇文章給大家看,看了大家的留言,贊了。
希望對大家有幫助~
聲明:本網(wǎng)轉(zhuǎn)發(fā)此文章,旨在為讀者提供更多信息資訊,所涉內(nèi)容不構(gòu)成投資、消費(fèi)建議。文章事實(shí)如有疑問,請與有關(guān)方核實(shí),文章觀點(diǎn)非本網(wǎng)觀點(diǎn),僅供讀者參考。
猜你喜歡
-
游客在進(jìn)入北京環(huán)球度假區(qū)時須核驗(yàn)北京健康
具體如下:北京環(huán)球度假區(qū)繼續(xù)按照相關(guān)政府部門的限流要求,以預(yù)約入園的形式加強(qiáng)人流動態(tài)監(jiān)測和...詳情
2022-04-28
-
杭州湘湖的草坪人氣很高不少人在這里搭帳篷
湘湖邊亂搭帳篷,煞了春日風(fēng)景景區(qū)出臺最新政策,將設(shè)置臨時帳篷搭建區(qū),后續(xù)還要增設(shè)露營服務(wù)區(qū)...詳情
2022-04-14
-
南非徐霞客在云南:從行萬里路到吃百碗米線
題:南非徐霞客在云南:從行萬里路到吃百碗米線的文化之旅杜安睿來自南非,是一名國際注冊會計師...詳情
2022-04-10
-
廣州新增3例本土確診病例雙層觀光巴士全部
廣州新增3例本土確診病例雙層觀光巴士全部停運(yùn)廣州市政府新聞辦公室21日公布的信息顯示,過去...詳情
2022-03-22