javascript中時區(qū)知識的整理UTC GMT問題
GMT, UTC 是什么?
- GMT: 格林尼治時間
- UTC: 協(xié)調(diào)世界時
GMT 與 UTC 不完全相同, 但都是指 0 時區(qū)時間, 一般情況可以視作同義
作為 javascript 開發(fā)者, 是不是對 GMT 很眼熟?
其實 GMT 就是我們調(diào)用 new Date(); 時, 返回的字符串 “Wed Jan 06 2021 17:48:30 GMT+0800 (中國標(biāo)準(zhǔn)時間)” 中的 GMT
GMT+0800: 中國是東8區(qū), 所以是 格林尼治時間 + 08:00 (東正西負(fù); +0800 即是 +08:00, 的意思; 有興趣的自行上網(wǎng)學(xué)習(xí))
時差是什么?
本文中的"時差"指的是 javascript 中的時差, 而不是地理上的時差
javascript 中的時差是指 格林威治時間和本地時間之間的時間差
也就是
格林威治時間 - 本地時間 = 時差
經(jīng)過簡單換算, 可得以下結(jié)論:
- UTC + 8 = GMT + 8 = 北京時間(中國是東8區(qū))
- 格林威治時間 + 8 = 北京時間
- 格林威治時間 - 北京時間 = -8
- 格林威治時間 - 本地時間 = 時差
getTimezoneOffset()
javascript 提供一個方法用于獲取時差
getTimezoneOffset() 方法可返回格林威治時間和本地時間之間的時差,以分鐘為單位
用法:
new Date().getTimezoneOffset() // -480
javascript 時間戳
指定的日期和時間距 1970 年 1 月 1 日午夜(GMT 時間)之間的毫秒數(shù)
這里強(qiáng)調(diào)兩點(diǎn), 兩點(diǎn)缺一不可
- 1970 年 1 月 1 日 0 時 0 分 0 秒
- 格林威治時間
設(shè)置日期時間
new Date() 可以不傳值也可以接受好幾種值
new Date(時間戳)
- 先根據(jù)傳入毫秒數(shù)算得 GMT, 再把 GMT 轉(zhuǎn)換到本地時區(qū)
- 所以傳入 0 得到的不是 0 點(diǎn)而是 8 點(diǎn)(中國是東8區(qū))
new Date(時間字符串)
- 時間字符串可以是這樣的 “1970-1-10 0:0:0”
- 還可以在后面補(bǔ)充指定時區(qū) “1970-1-10 0:0:0 gmt+0900”
- 不指定時區(qū), 默認(rèn)是 GMT+0800(中國是東8區(qū))
- 最后轉(zhuǎn)換成本地時區(qū)
new Date(year, month, day, hours, minutes, seconds, milliseconds)
- 最少傳入兩數(shù)據(jù), 傳 null 或不傳, 為當(dāng)前時間的值
- 傳入的是本地時區(qū)
- 獲得的是本地時區(qū)
獲取時間戳
方法很多
- new Date().getTime()
- new Date().valueOf()
- +new Date()
- Date.now()
得到的時間戳, 是把本地時間(北京時間)換算成 GMT , 再計算跟 1970 年 1 月 1 日 0 時 0 分 0 秒 的毫秒差值
Date.UTC()
Date.UTC(年,月,日,時,分,秒,毫秒)
得到的時間戳, 直接就是 GMT, 再計算跟 1970 年 1 月 1 日 0 時 0 分 0 秒 的毫秒差值
UTC() 方法可根據(jù)世界時返回 1970 年 1 月 1 日 到指定日期的毫秒數(shù)
參數(shù)不能為空, 可以為 null, 缺失值或 null 以 0 補(bǔ)充
UTC, 時差, 本地時間關(guān)系的代碼表達(dá)
var _date = new Date(); var _UTC = Date.UTC(_date.getFullYear(), _date.getMonth(), _date.getDate(), _date.getHours(), _date.getMinutes(), _date.getSeconds(), _date.getMilliseconds()); var _BJ = _date * 1; var _timeDifference = new Date().getTimezoneOffset() * 60 * 1000 _BJ - _UTC === _timeDifference // true
//end
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Js使用WScript.Shell對象執(zhí)行.bat文件和cmd命令
這篇文章主要介紹了Js使用WScript.Shell對象執(zhí)行.bat文件和cmd命令,需要的朋友可以參考下2014-12-12HTA版JSMin(省略修飾語若干)基于javascript語言編寫
JSMin是一種很有用的ECMAScript代碼減肥工具,雖然它只是一種較為初級的工具,但用它來對付我自己編寫的大部分ECMAScript代碼效果都很不錯,而且在我這里也從未發(fā)生過減肥后代碼出錯之類的問題。2009-12-12使用js/jquery獲取指定class名稱的3種方式總結(jié)
獲取class的值其實非常簡單,這篇文章主要給大家介紹了關(guān)于總結(jié)使用js/jquery獲取指定class名稱的3種方式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03javascript 判斷數(shù)組是否已包含了某個元素的函數(shù)
javascript判斷數(shù)組是否已包含了某個元素的js函數(shù),方便數(shù)組的判斷。2010-05-05MUI 解決動態(tài)列表頁圖片懶加載再次加載不成功的bug問題
這篇文章主要介紹了MUI 解決動態(tài)列表頁圖片懶加載再次加載不成功的bug問題,解決方法很簡單的,需要的朋友可以參考下2017-04-04