Como posso remover o horário da data com o Moment.js?

268
formatCalendarDate = function (dateTime) {
    return moment.utc(dateTime).format('LLL');
};

Ele exibe: "28 de fevereiro de 2013 09:24"

Mas eu gostaria de remover o horário no final. Como eu posso fazer isso?

Estou usando o Moment.js .

Obsivus
fonte
Método Use Dividir para separar as cordas
AmGates

Respostas:

605

Desculpe entrar tão tarde, mas se você deseja remover a parte do tempo de um em moment()vez de formatá- lo, o código é:

.startOf('day')

Ref: http://momentjs.com/docs/#/manipulating/start-of/

Graham Charles
fonte
90
Tenha cuidado com isso se estiver entre fusos horários (ou se não estiver prestando atenção nos fusos horários). Tive um problema em que minha data UTC estava sendo convertida para a hora local e, em seguidastartOf('day') , aplicando , que era o início do dia anterior . Corrigido commoment(moment.utc('2013-10-29T00:00:00+00:00').startOf('day').format('LL')).startOf('day').toDate()
colllin
26
Também deve ter cuidado que esta função na verdade transforma o objeto original
Dirk Boer
6
.startOf('day')não remove a parte da hora em si, apenas define a hora para 00:00:00. Então, sim, como comentado por 'collin', você deve ter cuidado ao salvar a data. Melhor alternativa está usando format('LL'), como já foi respondido neste tópico.
Sudarshan_SMD
4
Para evitar a mutação do objeto original, use someMoment.clone().startOf('day')ou moment(someMoment).startOf('day').
Pang
Cuidado, startOf ('dia') redefinirá tudo e não apenas definirá o horário para 00:00:00. moment().utc().add(1,'d').startOf('day')redefinirá o objeto para hoje.
Tristan
50

Usar format('LL')

Dependendo do que você está tentando fazer, format('LL')pode fazer o truque. Produz algo como isto:

Moment().format('LL'); // => April 29, 2016
Joshua Pinter
fonte
26

A maneira correta seria especificar a entrada conforme sua exigência, o que lhe dará mais flexibilidade.

A presente definição inclui os seguintes

LTS : 'h:mm:ss A', LT : 'h:mm A', L : 'MM/DD/YYYY', LL : 'MMMM D, YYYY', LLL : 'MMMM D, YYYY h:mm A', LLLL : 'dddd, MMMM D, YYYY h:mm A'

Você pode usar qualquer uma dessas opções ou alterar a entrada passada para moment (). Format (). Por exemplo, para o seu caso, você pode passar moment.utc(dateTime).format('MMMM D, YYYY').

Sahil Jain
fonte
9
formatCalendarDate = function (dateTime) {
    return moment.utc(dateTime).format('LL')
}
AmGates
fonte
6

Você também pode usar este formato:

moment().format('ddd, ll'); // Wed, Jan 4, 2017

Hashmita Raut
fonte
6

Com as versões mais recentes do moment.js, você também pode fazer isso:

var dateTime = moment();

var dateValue = moment({
    year: dateTime.year(),
    month: dateTime.month(),
    day: dateTime.date()
});

Consulte: http://momentjs.com/docs/#/parsing/object/ .

Torben Rahbek Koch
fonte
Não seria em date: dateTime.date()vez de day: dateTime.date()?
philfreo
1
'chave de dia e data significam dia do mês'. dos documentos. dayfunciona pré versão 2.8.4.
Oldwizard # 17/17
6

Ok, então eu sei que estou muito atrasado para a festa. Como seis anos atrasado, mas isso era algo que eu precisava descobrir e formatá-lo AAAA-MM-DD.

moment().format(moment.HTML5_FMT.DATE); // 2019-11-08

Você também pode passar um parâmetro como 2019-11-08T17:44:56.144,.

moment("2019-11-08T17:44:56.144").format(moment.HTML5_FMT.DATE); // 2019-11-08

https://momentjs.com/docs/#/parsing/special-formats/

Mix Master Mike
fonte
4

Sempre que uso a moment.jsbiblioteca, especifique o formato desejado da seguinte maneira:

moment(<your Date goes here>).format("DD-MMM-YYYY")

ou

moment(<your Date goes here>).format("DD/MMM/YYYY")

... etc Espero que você entenda

Dentro da função de formato, você coloca o formato desejado. O exemplo acima eliminará todos os elementos indesejados da data, como minutos e segundos

Adrian Grzywaczewski
fonte
Não é uma boa ideia se você deseja exibir seu conteúdo em diferentes localidades. Se você quiser datas de exibição no formato correto para a localidade do usuário, você precisa usar um dos formatos de data pré-definido ( L, LL, etc.)
AJ Richardson
Por que você define o MMM três vezes.
Menai Ala Eddine - Aladdin
A MMM fornecerá as 3 primeiras letras do mês. MMMM 'Apr' lhe dará um nome completo para o mês
Adrian Grzywaczewski
4

Para pessoas como eu, querem o formato de data longa ( LLLL), mas sem a hora do dia, existe um problema no GitHub: https://github.com/moment/moment/issues/2505 . Por enquanto, há uma solução alternativa:

var localeData = moment.localeData( moment.locale() ),
    llll = localeData.longDateFormat( 'llll' ),
    lll = localeData.longDateFormat( 'lll' ),
    ll = localeData.longDateFormat( 'll' ),
    longDateFormat = llll.replace( lll.replace( ll, '' ), '' );
var formattedDate = myMoment.format(longDateFormat);
AJ Richardson
fonte
1
Finalmente uma resposta sensata. Pegue meu voto positivo, senhor! O problema ainda não foi resolvido, parece.
Oyalhi 01/08/19
3

Você pode usar este construtor

moment({h:0, m:0, s:0, ms:0})

http://momentjs.com/docs/#/parsing/object/

console.log( moment().format('YYYY-MM-DD HH:mm:ss') )

console.log( moment({h:0, m:0, s:0, ms:0}).format('YYYY-MM-DD HH:mm:ss') )
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

acucchieri
fonte
Adicione aqui algumas descrições de minério
Mathews Sunny
Isto é interessante! Está criando um momento e horas, minutos e segundos superiores, mas ainda mantendo a data subjacente. Interessante, porque eu imaginaria que moment({h:0, m:0, s:0, ms:0})isso me daria 1 de janeiro de 1970 em vez de hoje.
Simon_Weaver
Também parece que moment({ h: 0 })faz o mesmo.
Simon_Weaver
1
Os documentos dizemOmitted units default to 0 or the current date, month, and year.
Simon_Weaver
2

Tente o seguinte:

moment.format().split("T")[0]
Keith Blanchard
fonte
Cuidado com este método, pois 1993-06-07T22:00:00.000Zresultará como 1993-06-07se fosse o início do dia de1993-06-08
Tom