Format Datum mit moment.js


262

Ich habe eine Zeichenfolge in diesem Format:

var testDate = "Fri Apr 12 2013 19:08:55 GMT-0500 (CDT)"

Ich möchte moment.js verwenden, um es in diesem Format mm/dd/yyyy : 04/12/2013für die Anzeige zu erhalten.

Ich habe versucht, es mit dieser Methode zu tun,

moment(testDate,'mm/dd/yyyy');

Welche Fehler und sagt there is no such method called replace? gehe ich das falsch an?

Bearbeiten:

Ich sollte auch erwähnen, dass ich eine vorgefertigte Version von moment.js verwende, die für meteor.js gepackt ist

Object [object Date] has no method 'replace' : The Exact error from the console

Stapelverfolgung:

 at makeDateFromStringAndFormat (http://127.0.0.1:3000/packages/moment/lib/moment/moment.js?b4e3ac4a3d0794023a4410e7941c3e179398b5b0:539:29)
    at moment (http://127.0.0.1:3000/packages/moment/lib/moment/moment.js?b4e3ac4a3d0794023a4410e7941c3e179398b5b0:652:24)
    at populateProfileForEdit (http://127.0.0.1:3000/client/views/home/administration/directory/profiles/profiles.js?acfff908a6a099f37312f62892a22b40f82e5e0f:147:25)
    at Object.Template.profile_personal.rendered (http://127.0.0.1:3000/client/views/home/administration/directory/profiles/profiles.js?acfff908a6a099f37312f62892a22b40f82e5e0f:130:13)
    at Spark.createLandmark.rendered (http://127.0.0.1:3000/packages/templating/deftemplate.js?b622653d121262e50a80be772bf5b1e55ab33881:126:42)
    at http://127.0.0.1:3000/packages/spark/spark.js?45c746f38023ceb80745f4b4280457e15f058bbc:384:32
    at Array.forEach (native)
    at Function._.each._.forEach (http://127.0.0.1:3000/packages/underscore/underscore.js?867d3653d53e9c7a171483edbcad9670e12288c7:79:11)
    at http://127.0.0.1:3000/packages/spark/spark.js?45c746f38023ceb80745f4b4280457e15f058bbc:382:7
    at _.extend.flush (http://127.0.0.1:3000/packages/deps/deps.js?9642a93ae1f8ffa8eb1c2475b198c764f183d693:231:11) 

1
Verwenden Sie replace()in Ihrem Code? Wenn nicht, ruft das von Ihnen verwendete Plugin unangemessen eine nicht vorhandene Methode auf.
Cereallarceny

Ich habe meine Frage mit genauem Fehler und Stack-Trace mit der Methode aktualisiert, die 'replace' aufruft. Ich rufe überhaupt nicht direkt Ersetzen an
Warz

Antworten:


590

Das zweite Argument moment()ist ein Parsing - Format anstatt ein Anzeigeformat.

Dafür möchten Sie die .format()Methode :

moment(testDate).format('MM/DD/YYYY');

Beachten Sie auch, dass der Fall eine Rolle spielt. Für Monat, Tag des Monats und Jahr sollte das Format in Großbuchstaben angegeben werden.


Ausgezeichnet. Ich habe anfangs versucht, es wie dieses moment (). Format () zu verwenden, was fehlgeschlagen ist. Vielen Dank
Warz

var obj = {end_date: moment ($ scope.activity.endDate) .format ('MM / TT / JJJJ')};
Michael J. Calkins

@ MichaelCalkins Sorry. Wofür ist das? Und warum der zusätzliche Verweis auf AngularJS ( $scope)?
Jonathan Lonowski

@ JonathanLonowski Das kann jede Variable sein. Ich habe gerade programmiert und nach dieser Antwort gesucht. Nur ein Beispiel.
Michael J. Calkins

Immer wenn ich das Format verwende, kann ich date () nicht aufrufen. Also musste ich eine Art Teilzeichenfolgenkonstrukt verwenden, um den Tag aus einem ("TT-MM-JJJJ") Format herauszuholen.
Henk Jansen

49

Fügen Sie moment.js hinzu und verwenden Sie den folgenden Code, um Ihr Datum zu formatieren

var formatDate= 1399919400000;

var responseDate = moment(formatDate).format('DD/MM/YYYY');

Meine Ausgabe ist "13/05/2014"


1
Wie kann ich das umkehren? Ich meine, wenn ich das spätere Format habe und es in das erste ändern möchte.
Arslan Tariq

2
@ArslanTariq können Sie verwenden momentObject.valueOf(), um Millisekunden von der Epoche zu erhalten.
WesternGun

8
moment().format();                                // "2019-08-12T17:52:17-05:00" (ISO 8601, no fractional seconds)
moment().format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Monday, August 12th 2019, 5:52:00 pm"
moment().format("ddd, hA");                       // "Mon, 5PM"

1
Es wäre hilfreich, wenn Sie erklären würden, wie dieser Code das Problem des OP löst.
Robert Columbia

5

Zum Abgeben des Ausgabedatums verwenden format. Das Argument für den zweiten Moment dient zum Parsen. Wenn Sie es jedoch weglassen, testDatewird eine Warnung zur Ablehnung angezeigt

Verfallswarnung: Der angegebene Wert liegt nicht in einem anerkannten RFC2822- oder ISO-Format vor ...

Um diese Warnung wegzulassen, sollten Sie das Analyseformat angeben


Großartig, zuerst muss ich die Kennung (das Format) unseres Datumsformats und dann das gewünschte Format angeben. schönes Beispiel.
Sudhir K Gupta
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.