javascript - JS new Date() 保存到 mongodb 中會(huì)早8個(gè)小時(shí),我們這里是東八區(qū),mongodb 保存的是格林尼治時(shí)間
問(wèn)題描述
我用的 mongoose ,這是我定義的 Schema :
const report = mongoose.Schema({ datetime: Date, username: String, detail: mongoose.Schema.Types.Mixed})
這是我存入的數(shù)據(jù):
let params = { username: ’testadmin’, detail: ’23123’, datetime: new Date(’December 17, 1995 03:24:00’)}
存進(jìn) mongodb 中后存的時(shí)間會(huì)早八個(gè)小時(shí):‘95年12月17日凌晨3點(diǎn)’變成了‘12月16日晚上7點(diǎn),時(shí)區(qū)搞錯(cuò)了,,,請(qǐng)問(wèn)大家這種情況應(yīng)該怎么辦?mongodb 或者 mongoose 有相應(yīng)的處理方法嗎?
小弟這里先謝過(guò)!
問(wèn)題解答
回答1:原來(lái)mongodb中存的是UTC時(shí)間,全球統(tǒng)一,,,那就直接存,再存之前不做操作,讀取出來(lái)后把時(shí)間new Date(report.datetime).toLocaleString(),調(diào)用js自帶的Date().toLocaleString()就行了
回答2:因?yàn)?mongoose 和 sequelize 開(kāi)始的時(shí)候,沒(méi)有考慮時(shí)區(qū),ORM 之后就搞錯(cuò)時(shí)區(qū)了。解決方法去看看最新版本是否解決,如果還未解決可以試試把問(wèn)題發(fā)給作者,然后只能自己在應(yīng)用層預(yù)處理,寫(xiě)入 +8 小時(shí),讀出 -8 。
回答3:getTimezoneOffset() 方法可返回格林威治時(shí)間和本地時(shí)間之間的時(shí)差,以分鐘為單位。
回答4:存成unix時(shí)間戳吧,這樣就不會(huì)有啥問(wèn)題了,取出來(lái)的時(shí)候 根據(jù)時(shí)區(qū)去處理轉(zhuǎn)換就可以了
回答5:你在把那個(gè)iso時(shí)間new Date回來(lái)就好了,存的是iso標(biāo)準(zhǔn)時(shí)間,new Date的時(shí)候回自動(dòng)轉(zhuǎn)成本地時(shí)區(qū)
回答6:正如樓上有同學(xué)所說(shuō)的,使用ISO格式:new Date('2017-03-02T08:00:00+08:00')
或者
使用moment.js
供參考。
Love MongoDB! Have fun!
回答7:可以嘗試保存時(shí)間戳
