Heim  >  Fragen und Antworten  >  Hauptteil

javascript - JS new Date() wird 8 Stunden früher sein, wenn es in Mongodb gespeichert wird. Wir sind im East Eighth District und Mongodb spart Greenwich-Zeit.

Ich verwende Mungo,
Dies ist das Schema, das ich definiert habe:

const report = mongoose.Schema({
    datetime: Date,
    username: String,
    detail: mongoose.Schema.Types.Mixed
})

Das sind die Daten, die ich gespeichert habe:

let params = {
    username: 'testadmin',
    detail: '23123',
    datetime: new Date('December 17, 1995 03:24:00')
}

Die in Mongodb eingesparte Zeit beträgt acht Stunden früher:

„3:00 Uhr am 17. Dezember 1995“ wird zu „19:00 Uhr am 16. Dezember, die Zeitzone ist falsch,,, Bitte sagen Sie mir was.“ sollten Sie in dieser Situation tun? Gibt es eine entsprechende Verarbeitungsmethode in Mongodb oder Mungo?

Vielen Dank im Voraus, Bruder!

我想大声告诉你我想大声告诉你2715 Tage vor1645

Antworte allen(7)Ich werde antworten

  • 伊谢尔伦

    伊谢尔伦2017-06-05 11:10:46

    原来mongodb中存的是UTC时间,全球统一,,,那就直接存,再存之前不做操作,读取出来后把时间new Date(report.datetime).toLocaleString(),调用js自带的Date().toLocaleString()就行了

    Antwort
    0
  • 漂亮男人

    漂亮男人2017-06-05 11:10:46

    因为 mongoose 和 sequelize 开始的时候,没有考虑时区,ORM 之后就搞错时区了。解决方法去看看最新版本是否解决,如果还未解决可以试试把问题发给作者,然后只能自己在应用层预处理,写入 +8 小时,读出 -8 。

    Antwort
    0
  • 滿天的星座

    滿天的星座2017-06-05 11:10:46

    getTimezoneOffset() 方法可返回格林威治时间和本地时间之间的时差,以分钟为单位。

    Antwort
    0
  • 世界只因有你

    世界只因有你2017-06-05 11:10:46

    存成unix时间戳吧,这样就不会有啥问题了,取出来的时候 根据时区去处理转换就可以了

    Antwort
    0
  • PHP中文网

    PHP中文网2017-06-05 11:10:46

    你在把那个iso时间new Date回来就好了,存的是iso标准时间,new Date的时候回自动转成本地时区

    Antwort
    0
  • 我想大声告诉你

    我想大声告诉你2017-06-05 11:10:46

    正如楼上有同学所说的,使用ISO格式:new Date("2017-03-02T08:00:00+08:00")

    或者

    使用moment.js

    供参考。

    Love MongoDB! Have fun!


    Antwort
    0
  • 世界只因有你

    世界只因有你2017-06-05 11:10:46

    可以尝试保存时间戳

    Antwort
    0
  • StornierenAntwort