Come convertire unix timestamp in data del momento moment.js


141

Ho un timestamp unix e sto provando a convertirlo in una data di calendario come MM/DD/YYYY. Finora ho questo:

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

Quando provo a stampare la data del calendario, la finestra dice "Data non valida". Qualcuno può darmi una mano?

Risposte:


364

Utilizzando moment.js come richiesto, esiste un unixmetodo che accetta timestamp unix in pochi secondi:

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

3
Non è una data di calendario.
Ian Warburton,

1
@IanWarburton - non è ??
Matt Johnson-Pint,

Suppongo che sia secondo la domanda. Ma penso che una data di calendario in moment.js assomigli a questo .... momento (nuova data (item.date)). Calendar ()
Ian Warburton

5
@IanWarburton - Non avresti bisogno del nuovo oggetto data lì dentro. La calendarfunzione è buona ( documenti qui ), ma non nel formato richiesto dall'OP.
Matt Johnson-Pint,

1
Vale la pena notare perché la domanda non riesce, ma funziona. Il motivo è perché si monent(number) aspetta un timestamp unix in milli secondi (che è coerente con l' Dateoggetto), mentre il timestamp unix è in secondi per impostazione predefinita. Quindi potresti anche fare moment(value*1000)invece di moment.unix(value), ma l'utilizzo unixè più chiaro.
icc97,

39

Timestamp UNIX è il conteggio dei secondi dal 1970, quindi è necessario convertirlo in oggetto JS Date:

var date = new Date(unixTimestamp*1000);

Sì, quella era la soluzione con l'ultima versione di moment, o almeno quella che ho ricevuto da npm di recente. anche se ho preso il .unix () dal momento in cui ho dovuto * 1000 quando ho istanziato di nuovo. per esempio: momento (momento (). unix () * 1000)
kroe

Migliore risposta rispetto alla logica moment.js
Andris

19

Moment.js fornisce formati localizzati che possono essere utilizzati.

Ecco un esempio:

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
Sebbene questo codice possa rispondere alla domanda, sarebbe meglio includere un certo contesto, spiegare come funziona e descrivere quando usarlo. Le risposte di solo codice non sono utili a lungo termine. Inoltre, il tuo codice non è formattato correttamente.
Ryanuyu,


3

Potrebbe essere un po 'in ritardo ma per nuovi problemi come questo uso questo codice:

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

Puoi modificare il formato in base alle tue esigenze e aggiungere anche il fuso orario in questo modo:

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

1
Questo è il metodo migliore che ho visto qui.
LukeVenter,

1
Solo per aggiungere a questa risposta (che è la risposta più corretta qui). Usa lettere minuscole xper ms unix timestamp. Documentazione qui
JonTroncoso

0

L'ho risolto come in questo esempio.

$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);
});

C'è una modalità rigorosa e una modalità di perdono .

Mentre la modalità rigorosa funziona meglio nella maggior parte delle situazioni, la modalità di perdono può essere molto utile quando il formato della stringa che viene passato al momento può variare.

In una versione successiva, per impostazione predefinita il parser utilizza la modalità rigorosa. La modalità rigorosa richiede l'input al momento in modo che corrisponda esattamente al formato specificato, inclusi i separatori. La modalità rigorosa viene impostata passando true come terzo parametro alla funzione moment.

Uno scenario comune in cui la modalità di perdono è utile è nelle situazioni in cui un'API di terze parti fornisce la data e il formato della data per tale API potrebbe cambiare. Supponiamo che un'API inizi inviando le date nel formato "AAAA-MM-GG", per poi passare al formato "MM / GG / AAAA".

In modalità rigorosa, il codice seguente mostra "Data non valida":

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

In modalità perdona usando una stringa di formato, ottieni una data errata:

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

un altro modo sarebbe

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

0

Questa funzione crea la data dal timestamp:

    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
Sebbene questo codice possa risolvere il problema del PO, è meglio includere una spiegazione su come il codice risolve il problema del PO. In questo modo, i futuri visitatori possono imparare dal tuo post e applicarlo al proprio codice. SO non è un servizio di codifica, ma una risorsa per la conoscenza. Inoltre, è più probabile che vengano votate risposte complete e di alta qualità. Queste caratteristiche, insieme alla necessità che tutti i post siano autonomi, sono alcuni dei punti di forza di SO come piattaforma, che lo differenzia dai forum. È possibile modificare per aggiungere ulteriori informazioni e / o integrare le proprie spiegazioni con la documentazione di origine.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.