MongoDB存儲(chǔ)時(shí)間時(shí)差問題的解決方法
前言
MongoDB存儲(chǔ)時(shí)間類型數(shù)據(jù)時(shí),都是先轉(zhuǎn)換為UTC時(shí)間,然后存儲(chǔ)到數(shù)據(jù)庫(kù)中,當(dāng)我們?nèi)〕龃鎯?chǔ)的時(shí)間時(shí),就會(huì)出現(xiàn)時(shí)差的問題。
比如我們用的北京時(shí)間,讀取到的數(shù)值就會(huì)看到比當(dāng)前時(shí)間少了8個(gè)小時(shí),難道說我們?cè)诿看巫x取的時(shí)候都要單獨(dú)處理一下時(shí)間嗎,這就比較麻煩。其實(shí),我們可以在存儲(chǔ)的時(shí)候進(jìn)行相應(yīng)的處理,只需使用getTimezoneOffset()和toISOString()函數(shù)。
需要了解的概念:
格林威治時(shí)間
格林威治子午線上的地方時(shí),或零時(shí)區(qū)(中時(shí)區(qū))的區(qū)時(shí)叫做格林威治時(shí)間,也叫世界時(shí)。(更多詳細(xì)的概念不說了,這里我們不需要。) 比如我們中國(guó)是東八區(qū),北京時(shí)間是(GMT+08:00)
獲得本地與格林威治時(shí)間的時(shí)差:new Date().getTimezoneOffset(),單位為分鐘。
已知格林威治時(shí)間,換算本地正確時(shí)間
本地時(shí)間 = 格林威治時(shí)間 - 時(shí)差
已知本地時(shí)間,換算對(duì)應(yīng)格林威治時(shí)間:
格林威治時(shí)間 = 本地時(shí)間 + 時(shí)差
已知本地時(shí)間,換算其他時(shí)區(qū)的時(shí)間
因?yàn)闀r(shí)區(qū)間的差異是以小時(shí)為單位的。所以算出0時(shí)區(qū)的時(shí)間后,再減去或加上相應(yīng)的小時(shí)即可(東N區(qū)便+N小時(shí),西N區(qū)便-N小時(shí))。 為了方便計(jì)算,東N區(qū)記做正數(shù),西N區(qū)記做負(fù)數(shù),即:
目標(biāo)時(shí)區(qū)時(shí)間 = 本地時(shí)間 + 時(shí)差 + 時(shí)區(qū)間隔
getTimezoneOffset函數(shù):返回此地區(qū)的時(shí)差(當(dāng)?shù)貢r(shí)間與GMT格林威治標(biāo)準(zhǔn)時(shí)間的地區(qū)時(shí)差),單位為分鐘。
<script> // 我們是東八區(qū) var d = new Date(); var tz = d.getTimezoneOffset(); console.log(tz); // -480 </script>
toISOString()函數(shù):使用ISO標(biāo)準(zhǔn)將 Date 對(duì)象轉(zhuǎn)換為字符串。
該標(biāo)準(zhǔn)稱為 ISO-8601 ,格式為: YYYY-MM-DDTHH:mm:ss.sssZ。
語法
Date.toISOString()
返回值
| 類型 | 描述 |
|---|---|
| String | ISO 標(biāo)準(zhǔn)格式的時(shí)間與日期 |
封裝時(shí)間轉(zhuǎn)換函數(shù)
localDate(v) {
const d = new Date(v || Date.now());
d.setMinutes(d.getMinutes() - d.getTimezoneOffset());
return d.toISOString();
},
我們?cè)诖鎯?chǔ)時(shí)間的時(shí)候調(diào)用localDate()這個(gè)函數(shù)就可以了,無論你處在哪個(gè)時(shí)區(qū)結(jié)果顯示都和當(dāng)?shù)貢r(shí)間一樣。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
mongodb 中rs.stauts()命令參數(shù)解析
MongoDB的rs.status()命令是查看副本集狀態(tài)的重要工具,它可以展示副本集中各個(gè)成員的角色、健康狀態(tài)、同步進(jìn)度等關(guān)鍵信息,本文介紹mongodb 中rs.stauts()命令參數(shù)解析,感興趣的朋友跟隨小編一起看看吧2024-09-09
MongoDB系列教程(四):設(shè)置用戶訪問權(quán)限
這篇文章主要介紹了MongoDB系列教程(四):設(shè)置用戶訪問權(quán)限,本文講解了在Windows環(huán)境下如何創(chuàng)建用戶認(rèn)證,需要的朋友可以參考下2015-05-05
MongoDB中aggregate()方法實(shí)例詳解
MongoDB中聚合(aggregate)主要用于處理數(shù)據(jù)(諸如統(tǒng)計(jì)平均值,求和等),并返回計(jì)算后的數(shù)據(jù)結(jié)果,下面這篇文章主要給大家介紹了關(guān)于MongoDB中aggregate()方法的相關(guān)資料,需要的朋友可以參考下2023-01-01
MongoDB 監(jiān)控工具mongostat和mongotop的使用
這篇文章主要介紹了MongoDB 監(jiān)控工具mongostat和mongotop的使用方法,幫助大家更好的理解和學(xué)習(xí)使用MongoDB,感興趣的朋友可以了解下2021-03-03
Centos7安裝和卸載Mongodb數(shù)據(jù)庫(kù)的方法
MongoDB是一個(gè)跨平臺(tái),面向文檔的數(shù)據(jù)庫(kù),提供高性能,高可用性和易于擴(kuò)展。MongoDB是工作在集合和文檔上一種概念。下面通過本文給大家分享Centos7安裝和卸載Mongodb數(shù)據(jù)庫(kù)的方法,需要的朋友參考下吧2017-11-11

