Met Moment.js kan ik een correct moment object niet transformeren naar een datum object met tijdzones. Ik kan'niet de juiste datum krijgen.
Example:
var oldDate = new Date(),
momentObj = moment(oldDate).tz("MST7MDT"),
newDate = momentObj.toDate();
console.log("start date " + oldDate)
console.log("Format from moment with offset " + momentObj.format())
console.log("Format from moment without offset " + momentObj.utc().format())
console.log("(Date object) Time with offset " + newDate)
console.log("(Date object) Time without offset "+ moment.utc(newDate).toDate())
Gebruik dit om een moment object om te zetten in een datum object:
Van http://momentjs.com/docs/#/displaying/as-javascript-date/
moment().toDate();
Opbrengst:
Tue Nov 04 2014 14:04:01 GMT-0600 (CST)
Zolang je moment-timezone hebt geïnitialiseerd met de gegevens voor de zones die je wilt, werkt je code zoals verwacht.
Je converteert het moment correct naar de tijdzone, wat te zien is in de tweede regel van de uitvoer van momentObj.format()
.
Overschakelen naar UTC laat niet alleen de offset vallen, het verandert terug naar de UTC-tijdzone. Als je dat gaat doen, heb je de originele .tz()
aanroep helemaal niet nodig. Je zou gewoon moment.utc()
kunnen doen.
Misschien probeer je alleen de output format string te veranderen? Als dat zo is, specificeer dan gewoon de parameters die je wilt bij de format
methode:
momentObj.format("YYYY-MM-DD HH:mm:ss")
Wat betreft de laatste twee regels van je code - wanneer je teruggaat naar een Datum
object met behulp van toDate()
, geef je het gedrag van moment.js op en ga je terug naar JavaScript's gedrag. Een JavaScript Datum
object zal altijd worden afgedrukt in de lokale tijdzone van de computer waarop het draait's. Er is niets wat moment.js daaraan kan doen.
Een paar andere kleine dingen:
Hoewel de moment constructor kan een Datum
nemen, is het meestal het beste om er geen te gebruiken. Voor "now", gebruik niet moment(new Date())
. Gebruik in plaats daarvan gewoon moment()
. Beide zullen werken, maar het is onnodig overbodig. Als je van een string parseert, geef die string dan direct door aan moment. Probeer het niet eerst te ontleden naar een Datum
. Je zult merken dat moment's parser veel betrouwbaarder is.
Tijdzones zoals MST7MDT
zijn er voor achterwaartse compatibiliteits redenen. Ze komen voort uit POSIX stijl tijdzones, en slechts een paar van hen zijn in de TZDB gegevens. Tenzij het absoluut noodzakelijk is, zou u een sleutel als America/Denver
moeten gebruiken.