Wie formatiere ich ein Datum in moment.js als ISO 8601?

Lesezeit: 4 Minuten

Diese Dokumente erwähnen moment.ISO_8601 als Formatierungsoption (ab 2.7.0 – http://momentjs.com/docs/#/parsing/special-formats/), aber keines davon funktioniert (sogar 2.7.0):

var date = moment();
date.format(moment.ISO_8601); // error
moment.format(date, moment.ISO_8601); // error

(http://jsfiddle.net/b3d6uy05/1/)

Wie erhalte ich eine ISO 8601 von moment.js?

  • Welche Moment-Version verwendest du? Die Dokumentation sagt, dass die Konstante in 2.7.0 hinzugefügt wurde.

    – Juden

    8. September 2014 um 13:11 Uhr

  • @joews 2.7.0. In Frage gestellt. Siehe meine Antwort, ich habe es herausgefunden. Dokumente sind jedoch nicht sehr klar.

    – Sennett

    8. September 2014 um 13:12 Uhr

  • Ja, sie erwähnen spezielle Formate nur im Zusammenhang mit dem Parsen. Seltsam.

    – Juden

    8. September 2014 um 13:15 Uhr

  • du kannst versuchen moment().toISOString()

    – Saahithyan Vigneswaran

    1. Mai 2017 um 17:23 Uhr

Benutzer-Avatar
Cyberwombat

moment().toISOString(); // or format() - see below

http://momentjs.com/docs/#/displaying/as-iso-string/

Aktualisieren
Basierend auf der Antwort: von @sennet und dem Kommentar von @dvlsg (vgl Geige) ist zu beachten, dass es einen Unterschied zwischen gibt format und toISOString. Beide sind richtig, aber der zugrunde liegende Prozess unterscheidet sich. toISOString konvertiert in ein Date-Objekt, setzt auf UTC und verwendet dann die native Date-Prototypfunktion, um ISO8601 in UTC mit Millisekunden auszugeben (YYYY-MM-DD[T]HH:mm:ss.SSS[Z]). Auf der anderen Seite, format verwendet das Standardformat (YYYY-MM-DDTHH:mm:ssZ) ohne Millisekunden und behält den Zeitzonenoffset bei.

Ich habe eine geöffnet Ausgabe da ich denke, dass es zu unerwarteten Ergebnissen führen kann.

  • Ich stimme dir zu @Yashua. Ich denke, die Verwendung von “format()” sollte vermieden werden, da es nicht intuitiv ist. Ich glaube auch nicht, dass eine Funktion, die nur das native “toISOString()” umschließt, überhaupt existieren sollte. Davon abgesehen ist es vielleicht besser, eine neue Funktion wie “toISO8601()” mit der Option zum Beibehalten der Zeitzone und einer ordnungsgemäßen Dokumentation bereitzustellen.

    – Greivin López

    24. April 2017 um 1:47 Uhr

  • Wenn Sie die UTC-Zeit möchten, aber auf Ihre eigene Weise formatiert haben, können Sie anstelle von ISO8601 Folgendes tun: moment().utc().format("OUTPUT_FORMAT")

    – Stinkende Katze

    10. Mai 2017 um 14:35 Uhr

  • Nützlich beim Formatieren eines Datums in Kibana, aber Sie haben keinen Zugriff auf JS.

    – Brice

    6. Oktober 2017 um 14:18 Uhr

  • Wenn Sie die lokale Zeitzone beibehalten möchten, verwenden Sie moment().toISOString(true);.

    – Benny Neugebauer

    23. Juli 2019 um 19:16 Uhr

Verwenden format ohne Parameter:

var date = moment();
date.format(); // "2014-09-08T08:02:17-05:00"

(http://jsfiddle.net/8gvhL1dz/)

  • Nur als Randnotiz, diese beiden Antworten sind nicht gleich, obwohl sie beide die ISO-Formatanforderungen erfüllen. date.toISOString() wird die Millisekunden behalten und utc verwenden, date.format() wird die Millisekunden fallen lassen und Ihre lokale Zeitzone verwenden (oder zumindest ist das das Verhalten, das ich derzeit in Chrome erhalte — jsfiddle.net/8gvhL1dz/22 )

    – dvlsg

    16. Oktober 2015 um 22:21 Uhr

  • Die Verwendung von .format() mit einem arabischen Gebietsschema führt zu arabischen Symbolen statt zu englischen, was wahrscheinlich unerwünscht ist.

    – Matt Sgarlata

    27. Juni 2017 um 11:54 Uhr


  • toISOString wird nicht in Ihrer lokalen Zeitzone ausgegeben – es ist immer in (Null-Offset) UTC.

    – JoeTidee

    25. Februar 2019 um 12:31 Uhr

Auch mit Vanilla JS möglich

new Date().toISOString() // "2017-08-26T16:31:02.349Z"

  • Nur wenn Sie es in UTC wollen, ohne die Zeitzone beizubehalten.

    – JoeTidee

    25. Februar 2019 um 12:29 Uhr

Wenn Sie Mongoose verwenden, um Daten in MongoDB zu speichern, müssen Sie toISOString() verwenden, da alle Daten als ISOdates mit Millisekunden gespeichert werden.

moment.format() 

2018-04-17T20:00:00Z

moment.toISOString() -> USE THIS TO STORE IN MONGOOSE

2018-04-17T20:00:00.000Z

var date = moment(new Date(), moment.ISO_8601);
console.log(date);

  • Kannst du deine Antwort etwas präzisieren?

    – Stephan Hogenboom

    19. November 2020 um 9:23 Uhr

Benutzer-Avatar
Matt Sgarlata

Wenn Sie nur den Datumsteil (z. B. 2017-06-27) möchten und möchten, dass er unabhängig von der Zeitzone und auch auf Arabisch funktioniert, habe ich hier den Code geschrieben:

function isoDate(date) {
    if (!date) {
        return null
    }
    date = moment(date).toDate()

    // don't call toISOString because it takes the time zone into
    // account which we don't want.  Also don't call .format() because it
    // returns Arabic instead of English

    var month = 1 + date.getMonth()
    if (month < 10) {
        month="0" + month
    }
    var day = date.getDate()
    if (day < 10) {
        day = '0' + day
    }
    return date.getFullYear() + '-' + month + '-' + day
}

  • Kannst du deine Antwort etwas präzisieren?

    – Stephan Hogenboom

    19. November 2020 um 9:23 Uhr

Benutzer-Avatar
Davis Jones

Antwort im Jahr 2020 (einschließlich Zeitzonenunterstützung)

Das Problem, das wir hatten, war, dass ISOStrings standardmäßig nicht auf Ihre Zeitzone lokalisiert sind. Das ist also ein bisschen hacky, aber so haben wir dieses Problem gelöst:

/** Imports Moment for time utilities. */
const moment = require("moment-timezone")
moment().tz("America/Chicago").format()

//** Returns now in ISO format in Central Time */
export function getNowISO() {
  return `${moment().toISOString(true).substring(0, 23)}Z`
}

Dies wird Sie mit einem verlassen genau ISO-formatierte, lokalisierte Zeichenfolge.

Wichtiger Hinweis: Moment jetzt schlägt vor Verwendung anderer Pakete für neue Projekte.

1312270cookie-checkWie formatiere ich ein Datum in moment.js als ISO 8601?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy