Como converter carimbo de data / hora unix em data do momento moment.js

141

Eu tenho um registro de data e hora unix e estou tentando convertê-lo em uma data do calendário como MM/DD/YYYY. Até agora, eu tenho o seguinte:

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

Quando tento imprimir a data do calendário, a janela diz "Data inválida". Alguém pode me ajudar?

Andrew
fonte

Respostas:

364

Usando moment.js como você pediu, existe um unixmétodo que aceita carimbos de data e hora unix em segundos:

var dateString = moment.unix(value).format("MM/DD/YYYY");
Matt Johnson-Pint
fonte
3
Essa não é uma data do calendário.
Ian Warburton
1
@IanWarburton - não é ??
Matt Johnson-Pint
Suponho que esteja de acordo com a pergunta. Mas eu acho que uma data do calendário em moment.js olhares como este .... momento (new Date (item.date)) calendário ().
Ian Warburton
5
@IanWarburton - Você não precisaria do novo objeto de data lá. A calendarfunção é boa ( documentos aqui ), mas não no formato solicitado pelo OP.
Matt Johnson-Pint
1
Vale a pena notar por que a pergunta falha, mas isso funciona. O motivo é porque monent(number) espera um carimbo de data / hora unix em mili segundos (que é consistente com o Dateobjeto), enquanto o carimbo de data e hora unix está em segundos por padrão. Então você também pode fazer em moment(value*1000)vez de moment.unix(value), mas usar unixé mais claro.
icc97 11/03
39

Registro de data e hora do UNIX, é contagem de segundos a partir de 1970, portanto você precisa convertê-lo no objeto JS Date:

var date = new Date(unixTimestamp*1000);
Cris
fonte
Sim, essa foi a solução com a versão mais recente do momento, ou pelo menos a que recebi do npm recentemente. mesmo que eu tenha o .unix () a partir do momento, tive que * 1000 ao instanciar novamente. por exemplo: momento (momento () UNIX () * 1000.)
kroe
Melhor resposta em relação à lógica moment.js
Andris
19

Moment.js fornece formatos localizados que podem ser usados.

Aqui está um exemplo:

const moment = require('moment');

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

console.log(formatted); // "02/24/2018"
Benny Neugebauer
fonte
4
new moment(timeStamp,'yyyyMMddHHmmssfff').toDate()
Mohamed.Abdo
fonte
9
Embora esse código possa responder à pergunta, seria melhor incluir algum contexto, explicar como ele funciona e descrever quando usá-lo. Respostas somente de código não são úteis a longo prazo. Além disso, seu código não está formatado corretamente.
Ryanyuyu
4

Só isso,

moment.unix(date).toDate();
Danillo Leão Lopes
fonte
3

Pode ser um pouco tarde, mas para novos problemas como esse eu uso este código:

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

Você pode alterar o formato para atender às suas necessidades e também adicionar fuso horário como este:

moment(timestamp, 'X').tz(timezone).format('lll');
Eduardo Sanchez G
fonte
1
Este é o melhor método que eu já vi aqui.
LukeVenter
1
Apenas para adicionar a esta resposta (que é a resposta mais correta aqui). Use minúsculas xpara o carimbo de data / hora do ms unix. Documentação aqui
JonTroncoso
0

Corrigi-o como este exemplo.

$scope.myCalendar = new Date(myUnixDate*1000);
<input date-time ng-model="myCalendar" format="DD/MM/YYYY" />
Khachornchit Songsaen
fonte
0
$(document).ready(function() {
    var value = $("#unixtime").val(); //this retrieves the unix timestamp
    var dateString = moment(value, 'MM/DD/YYYY', false).calendar(); 
    alert(dateString);
});

Existe um modo estrito e um modo de perdão .

Embora o modo estrito funcione melhor na maioria das situações, o modo de perdoar pode ser muito útil quando o formato da sequência que está sendo passada para o momento pode variar.

Em uma versão posterior, o analisador usará o modo estrito como padrão. O modo estrito requer que a entrada no momento corresponda exatamente ao formato especificado, incluindo separadores. O modo estrito é definido passando true como o terceiro parâmetro para a função moment.

Um cenário comum em que o modo de perdoar é útil ocorre em situações em que uma API de terceiros está fornecendo a data e o formato da data para essa API pode mudar. Suponha que uma API comece enviando datas no formato 'AAAA-MM-DD' e depois mude para o formato 'MM / DD / AAAA'.

No modo estrito, o seguinte código resulta na exibição de 'Data Inválida':

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

No modo de perdoar usando uma string de formato, você obtém uma data errada:

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

outra maneira seria

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

devon kassian
fonte
0

Esta função cria a data a partir do registro de data e hora:

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

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

        return parsed.format('MMM D, YYYY, HH:mmA')
    }
Bill Zelenko
fonte
0
moment(1454521239279).toDate()
moment(1454521239279).format()
Vincent
fonte
0
moment(timestamp).format('''any format''')
Rishabh Mehrotra
fonte
3
Embora esse código possa resolver o problema do OP, é melhor incluir uma explicação sobre como o seu código soluciona o problema do OP. Dessa forma, futuros visitantes podem aprender com sua postagem e aplicá-la ao próprio código. O SO não é um serviço de codificação, mas um recurso para o conhecimento. Além disso, respostas completas de alta qualidade têm mais probabilidade de serem votadas. Esses recursos, juntamente com o requisito de que todas as postagens sejam independentes, são alguns dos pontos fortes do SO como plataforma, que o diferencia dos fóruns. Você pode editar para adicionar informações adicionais e / ou complementar suas explicações com a documentação de origem.
ysf 9/06