前言
MongoDB存儲時間類型數(shù)據(jù)時,都是先轉(zhuǎn)換為UTC時間,然后存儲到數(shù)據(jù)庫中,當(dāng)我們?nèi)〕龃鎯Φ臅r間時,就會出現(xiàn)時差的問題。
比如我們用的北京時間,讀取到的數(shù)值就會看到比當(dāng)前時間少了8個小時,難道說我們在每次讀取的時候都要單獨(dú)處理一下時間嗎,這就比較麻煩。其實(shí),我們可以在存儲的時候進(jìn)行相應(yīng)的處理,只需使用getTimezoneOffset()
和toISOString()
函數(shù)。
需要了解的概念:
格林威治時間
格林威治子午線上的地方時,或零時區(qū)(中時區(qū))的區(qū)時叫做格林威治時間,也叫世界時。(更多詳細(xì)的概念不說了,這里我們不需要。) 比如我們中國是東八區(qū),北京時間是(GMT+08:00)
獲得本地與格林威治時間的時差:new Date().getTimezoneOffset(),單位為分鐘。
已知格林威治時間,換算本地正確時間
本地時間 = 格林威治時間 - 時差
已知本地時間,換算對應(yīng)格林威治時間:
格林威治時間 = 本地時間 + 時差
已知本地時間,換算其他時區(qū)的時間
因?yàn)闀r區(qū)間的差異是以小時為單位的。所以算出0時區(qū)的時間后,再減去或加上相應(yīng)的小時即可(東N區(qū)便+N小時,西N區(qū)便-N小時)。 為了方便計算,東N區(qū)記做正數(shù),西N區(qū)記做負(fù)數(shù),即:
目標(biāo)時區(qū)時間 = 本地時間 + 時差 + 時區(qū)間隔
getTimezoneOffset函數(shù):返回此地區(qū)的時差(當(dāng)?shù)貢r間與GMT格林威治標(biāo)準(zhǔn)時間的地區(qū)時差),單位為分鐘。
script>
// 我們是東八區(qū)
var d = new Date();
var tz = d.getTimezoneOffset();
console.log(tz); // -480
/script>
toISOString()
函數(shù):使用ISO標(biāo)準(zhǔn)將 Date 對象轉(zhuǎn)換為字符串。
該標(biāo)準(zhǔn)稱為 ISO-8601 ,格式為: YYYY-MM-DDTHH:mm:ss.sssZ。
語法
返回值
類型 |
描述 |
String |
ISO 標(biāo)準(zhǔn)格式的時間與日期 |
封裝時間轉(zhuǎn)換函數(shù)
localDate(v) {
const d = new Date(v || Date.now());
d.setMinutes(d.getMinutes() - d.getTimezoneOffset());
return d.toISOString();
},
我們在存儲時間的時候調(diào)用localDate()
這個函數(shù)就可以了,無論你處在哪個時區(qū)結(jié)果顯示都和當(dāng)?shù)貢r間一樣。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
您可能感興趣的文章:- 深入了解MongoDB是如何存儲數(shù)據(jù)的
- MongoDB系列教程(八):GridFS存儲詳解
- PHP操作MongoDB GridFS 存儲文件的詳解
- PHP MongoDB GridFS 存儲文件的方法詳解
- Spring Boot集成Shiro并利用MongoDB做Session存儲的方法詳解
- Nodejs使用Mongodb存儲與提供后端CRD服務(wù)詳解
- python將MongoDB里的ObjectId轉(zhuǎn)換為時間戳的方法
- python根據(jù)時間生成mongodb的ObjectId的方法
- 深究從MongoDB的ObjectId中獲取時間信息
- MongoDB批量將時間戳轉(zhuǎn)為通用日期格式示例代碼