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 .


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/


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

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').


9
formatCalendarDate = function (dateTime) {
    return moment.utc(dateTime).format('LL')
}

6

Você também pode usar este formato:

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


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/ .


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/


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


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

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>


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]

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.