JavaScript獲取時區(qū)實現(xiàn)過程解析
在一個大型的項目中,不可避免會出現(xiàn)操作時間的業(yè)務,比如時間的格式化,比如時間的加減,我們一般會直接使用moment.js庫來做,畢竟穩(wěn)定可靠,也方便,那當我們系統(tǒng)只是幾個簡單頁面,對時間的操作并不是很大,引入庫文件并不是很必須的情況,我們需要時區(qū)展示怎么辦?是不是可以用瀏覽器支持的原生方法來實現(xiàn)?
時區(qū)
啥是時區(qū)?
時區(qū)是地球上的區(qū)域使用同一個時間定義。以前,人們通過觀察太陽的外置(時角)決定時間,這就使得不同經(jīng)度的地方的時間各有不同,為了統(tǒng)一使用同一個時間,就引入了時區(qū)的概念。時區(qū)通過設立一個標準時間部分地解決了這個問題。世界各國位于地球的不同位置,因此不同國家,特別是東西跨度大的國家日出、日落時間必定有偏差,這些偏差就是時差。
時區(qū)表示法
協(xié)調(diào)世界時(UTC)是最主要的世界時間標準,其以院子時秒長為基礎,在時刻上盡量接近于格林威治標準時間。協(xié)調(diào)世界時是世界上調(diào)調(diào)節(jié)時鐘和時間的主要標準。如果時間是以協(xié)調(diào)世界時(UTC)表示,則在時間后面加上“Z”,“Z”是協(xié)調(diào)世界時中0時區(qū)的標志。UTC時間也叫祖魯時間,因為在北約音標字母中用“Zulu”表示“Z”。
UTC偏移量的表示形式為:±[hh]:[mm]、±[hh][mm]或者±[hh]。比如北京時間比協(xié)調(diào)世界時(UTC)早八小時,那么應當表示為:UTC+8。
JavaScript獲得當前客戶端的時區(qū)
Intl對象是ECMAScript國際化API的一個命名空間,它提供了精確的字符串對比、數(shù)字格式化和日期格式化。我們需要使用這個API的DateTimeFormat對象。具體可以參考:MDN Intl.DateTimeFormat
獲得客戶端當前時區(qū):
Intl.DateTimeFormat().resolvedOptions().timeZone
可以看到輸出:Asia/Shanghai,即我所在時區(qū)為上海。
我們知道了在哪個時區(qū),但是我們需要同時表示UTC+n的形式,那我們怎么知道當前時區(qū)的UTC偏移量呢?
我們可以通過Date對象實例的getTimezoneOffset方法獲?。ㄗ⒁夥祷氐慕Y(jié)果的單位為分):
new Date().getTimezoneOffset()
可以看到輸出的是-480,這樣獲得到的是0時區(qū)的時間差(0時區(qū)減去當前所在時區(qū),單位是分鐘)。
中國標準時間是以東八區(qū)為準,比0時區(qū)的時間要早8小時。所以是-480,除以60就是所在時區(qū):然后-480 / 60 = -8,即現(xiàn)在這個時區(qū)的偏移量為0 - (-8) = 8,即表示為:UTC+8 ,代碼為:
’UTC+’ + (0 - new Date().getTimezoneOffset() / 60); // 輸出:UTC+8
需要注意的是,不管你以何參數(shù)實例化一個Date對象,js在本地存儲時,都會轉(zhuǎn)化為本地時區(qū),js不會幫你存儲實例化該日期時的時區(qū)信息。
相比較來說,moment.js是一個很好的時間處理的庫,如果有時間操作的業(yè)務還是直接使用moment.js庫方便一點,當然,只是顯示一下時區(qū)之類的,可以直接用上面簡單處理即可。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關文章:
1. 基于javaweb+jsp實現(xiàn)企業(yè)車輛管理系統(tǒng)2. asp.net core 認證和授權(quán)實例詳解3. uni-app結(jié)合.NET 7實現(xiàn)微信小程序訂閱消息推送4. jscript與vbscript 操作XML元素屬性的代碼5. php使用正則驗證密碼字段的復雜強度原理詳細講解 原創(chuàng)6. .NET中實現(xiàn)對象數(shù)據(jù)映射示例詳解7. ASP.NET MVC使用Boostrap實現(xiàn)產(chǎn)品展示、查詢、排序、分頁8. ASP.NET Core 7 Razor Pages項目發(fā)布到IIS的詳細過程9. XML在語音合成中的應用10. 如何使用ASP.NET Core 配置文件
