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