Ved hjelp av Moment.js kan jeg ikke transformere et korrekt øyeblikksobjekt til et datoobjekt med tidssoner. Jeg får ikke riktig dato.
Eksempel:
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())
Bruk dette til å transformere et øyeblikksobjekt til et datoobjekt:
Fra http://momentjs.com/docs/#/displaying/as-javascript-date/
moment().toDate();
Utbytte:
Tue Nov 04 2014 14:04:01 GMT-0600 (CST)
Så lenge du har initialisert moment-timezone med dataene for sonene du ønsker, fungerer koden din som forventet.
Du konverterer øyeblikket til tidssonen på riktig måte, noe som gjenspeiles i den andre linjen i utdataene fra momentObj.format()
.
Å bytte til UTC slipper ikke bare forskyvningen, den endres tilbake til UTC-tidssonen. Hvis du skal gjøre det, trenger du ikke det opprinnelige .tz()
-kallet i det hele tatt. Du kan bare gjøre moment.utc()
.
Kanskje du bare prøver å endre utdatastrengen? I så fall er det bare å spesifisere parametrene du vil ha til format
-metoden:
momentObj.format("YYYY-MM-DD HH:mm:ss")
Når det gjelder de siste til linjene i koden din - når du går tilbake til et Date
-objekt ved hjelp av toDate()
, gir du opp oppførselen til moment.js og går tilbake til JavaScript' s oppførsel. Et JavaScript Date
-objekt vil alltid skrives ut i den lokale tidssonen til datamaskinen det kjører på. Det er ingenting moment.js kan gjøre med det.
Et par andre små ting:
Selv om moment-konstruktøren kan ta en Date
, er det vanligvis best å ikke bruke en. For "nå", ikke bruk moment(new Date())
. Bruk i stedet bare moment()
. Begge vil fungere, men det er unødvendig overflødig. Hvis du analyserer fra en streng, send den strengen direkte inn i moment. Ikke prøv å analysere den til en Date
først. Du vil finne moment&# 39s parser å være mye mer pålitelig.
Tidssoner som MST7MDT
er der av hensyn til bakoverkompatibilitet. De stammer fra tidssoner i POSIX-stil, og bare noen få av dem er i TZDB-dataene. Med mindre det er absolutt nødvendig, bør du bruke en nøkkel som America/Denver
.