So konvertieren Sie Unix-Zeitstempel in Kalenderdatum moment.js


141

Ich habe einen Unix-Zeitstempel und versuche, ihn in ein Kalenderdatum wie z MM/DD/YYYY. Bisher habe ich Folgendes:

$(document).ready(function() {
  var value = $("#unixtime").val(); //this retrieves the unix timestamp
  var dateString = moment(value).calendar(); 
  alert(dateString);
});

Wenn ich versuche, das Kalenderdatum auszudrucken, wird im Fenster "Ungültiges Datum" angezeigt. Kann mir jemand helfen?

Antworten:


364

Wenn Sie moment.js wie gewünscht verwenden, gibt es eine unixMethode, die Unix-Zeitstempel in Sekunden akzeptiert:

var dateString = moment.unix(value).format("MM/DD/YYYY");

3
Das ist kein Kalenderdatum.
Ian Warburton

1
@ IanWarburton - es ist nicht?
Matt Johnson-Pint

Ich nehme an, es entspricht der Frage. Aber ich denke, ein Kalenderdatum in moment.js sieht so aus ... moment (neues Datum (item.date)). Kalender ()
Ian Warburton

5
@ IanWarburton - Sie würden das neue Datumsobjekt dort nicht benötigen. Die calendarFunktion ist nett ( Dokumente hier ), aber nicht in dem Format, das das OP angefordert hat.
Matt Johnson-Pint

1
Es ist erwähnenswert, warum die Frage fehlschlägt, aber das funktioniert. Der Grund ist , weil monent(number) erwartet einen Unix - Zeitstempel in milli Sekunden (die mit dem übereinstimmt DateObjekt), während der Unix - Zeitstempel in Sekunden standardmäßig ist. Sie könnten also auch moment(value*1000)stattdessen tun moment.unix(value), aber die Verwendung unixist klarer.
icc97

39

UNIX-Zeitstempel ist die Anzahl der Sekunden ab 1970, daher müssen Sie ihn in ein JS-Datumsobjekt konvertieren:

var date = new Date(unixTimestamp*1000);

Ja, das war die Lösung mit der neuesten Version von moment, oder zumindest der, die ich kürzlich von npm bekommen habe. obwohl ich die .unix () von dem Moment an bekam, musste ich * 1000, wenn ich sie erneut instanziierte. Zum Beispiel: moment (moment (). unix () * 1000)
kroe

Beste Antwort im Vergleich zu moment.js Logik
Andris

19

Moment.js bietet lokalisierte Formate, die verwendet werden können.

Hier ist ein Beispiel:

const moment = require('moment');

const timestamp = 1519482900000;
const formatted = moment(timestamp).format('L');

console.log(formatted); // "02/24/2018"

4
new moment(timeStamp,'yyyyMMddHHmmssfff').toDate()

9
Während dieser Code die Frage beantworten kann, ist es besser, einen Kontext einzuschließen, zu erklären, wie er funktioniert, und zu beschreiben, wann er verwendet werden soll. Nur-Code-Antworten sind auf lange Sicht nicht sinnvoll. Außerdem ist Ihr Code nicht richtig formatiert.
Ryanyuyu


3

Könnte etwas spät sein, aber für neue Probleme wie dieses verwende ich diesen Code:

moment(timestamp, 'X').format('lll');

Sie können das Format an Ihre Bedürfnisse anpassen und eine Zeitzone wie die folgende hinzufügen:

moment(timestamp, 'X').tz(timezone).format('lll');

1
Dies ist die beste Methode, die ich hier gesehen habe.
LukeVenter

1
Nur um diese Antwort zu ergänzen (was hier die richtigste Antwort ist). Verwenden Sie Kleinbuchstaben xfür den MS Unix-Zeitstempel. Dokumentation hier
JonTroncoso

0

Ich habe es wie in diesem Beispiel behoben.

$scope.myCalendar = new Date(myUnixDate*1000);
<input date-time ng-model="myCalendar" format="DD/MM/YYYY" />

0
$(document).ready(function() {
    var value = $("#unixtime").val(); //this retrieves the unix timestamp
    var dateString = moment(value, 'MM/DD/YYYY', false).calendar(); 
    alert(dateString);
});

Es gibt einen strengen Modus und einen Vergebungsmodus .

Während der strikte Modus in den meisten Situationen besser funktioniert, kann der Vergebungsmodus sehr nützlich sein, wenn das Format der Zeichenfolge, die an den Moment übergeben wird, variieren kann.

In einer späteren Version verwendet der Parser standardmäßig den strengen Modus. Im strengen Modus muss die Eingabe auf den Moment genau dem angegebenen Format entsprechen, einschließlich Trennzeichen. Der strikte Modus wird festgelegt, indem true als dritter Parameter an die Momentfunktion übergeben wird.

Ein häufiges Szenario, in dem der Vergebungsmodus nützlich ist, ist in Situationen, in denen eine Drittanbieter-API das Datum bereitstellt und sich das Datumsformat für diese API ändern kann. Angenommen, eine API sendet zunächst Daten im Format "JJJJ-MM-TT" und wechselt später in das Format "MM / TT / JJJJ".

Im strengen Modus führt der folgende Code dazu, dass "Ungültiges Datum" angezeigt wird:

moment('01/12/2016', 'YYYY-MM-DD', true).format()
"Invalid date"

Im Vergebungsmodus mit einer Formatzeichenfolge erhalten Sie ein falsches Datum:

moment('01/12/2016', 'YYYY-MM-DD').format()
"2001-12-20T00:00:00-06:00"

Ein anderer Weg wäre

$(document).ready(function() {
    var value = $("#unixtime").val(); //this retrieves the unix timestamp
    var dateString = moment.unix(value).calendar(); 
    alert(dateString);
});

0

Diese Funktion erstellt ein Datum aus dem Zeitstempel:

    function formatDateTime(dateString) {
        const parsed = moment(new Date(dateString))

        if (!parsed.isValid()) {
            return dateString
        }

        return parsed.format('MMM D, YYYY, HH:mmA')
    }

0
moment(1454521239279).toDate()
moment(1454521239279).format()

0
moment(timestamp).format('''any format''')

3
Während dieser Code das Problem des OP lösen kann, ist es am besten, eine Erklärung beizufügen, wie Ihr Code das Problem des OP behebt. Auf diese Weise können zukünftige Besucher aus Ihrem Beitrag lernen und ihn auf ihren eigenen Code anwenden. SO ist kein Codierungsdienst, sondern eine Ressource für Wissen. Es ist auch wahrscheinlicher, dass qualitativ hochwertige, vollständige Antworten positiv bewertet werden. Diese Funktionen sowie die Anforderung, dass alle Beiträge in sich geschlossen sind, sind einige der Stärken von SO als Plattform, die es von Foren unterscheidet. Sie können bearbeiten, um zusätzliche Informationen hinzuzufügen und / oder Ihre Erklärungen durch Quellendokumentation zu ergänzen.
ysf
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.