Come posso rimuovere l'ora dalla data con Moment.js?


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

Viene visualizzato: "28 febbraio 2013 09:24"

Ma vorrei rimuovere il tempo alla fine. Come lo posso fare?

Sto usando Moment.js .


Usa il metodo Split per separare le stringhe
AmGates,

Risposte:


605

Mi dispiace saltare così tardi, ma se si desidera rimuovere la parte di tempo moment()piuttosto che formattarla , il codice è:

.startOf('day')

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


90
Fai attenzione se stai andando tra i fusi orari (o se non stai prestando attenzione ai fusi orari). Ho avuto un problema a causa del quale la mia data UTC veniva convertita in ora locale, quindi in applicazione startOf('day'), che era quindi l'inizio del giorno precedente . Risolto conmoment(moment.utc('2013-10-29T00:00:00+00:00').startOf('day').format('LL')).startOf('day').toDate()
colllin il

26
Fai anche attenzione che questa funzione muta effettivamente l'oggetto originale
Dirk Boer,

6
.startOf('day')non rimuove la parte temporale di per sé, imposta semplicemente l'ora su 00:00:00. Quindi, sì, come commentato da 'collin', devi stare attento quando salvi la data. Si sta usando un'alternativa migliore format('LL'), come è stato risposto in questo thread.
Sudarshan_SMD,

4
Per evitare di mutare l'oggetto originale, utilizzare someMoment.clone().startOf('day')o moment(someMoment).startOf('day').
Fatta

Fai attenzione, startOf ('giorno') ripristinerà tutto e non imposterà l'ora solo su 00:00:00. moment().utc().add(1,'d').startOf('day')ripristinerà l'oggetto a oggi.
Tristan,

51

Uso format('LL')

A seconda di cosa stai cercando di fare con esso, format('LL')potrebbe fare il trucco. Produce qualcosa del genere:

Moment().format('LL'); // => April 29, 2016

26

Il modo corretto sarebbe quello di specificare l'input secondo il vostro requisito che vi darà maggiore flessibilità.

La presente definizione include quanto segue

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'

È possibile utilizzare uno di questi o modificare l'input passato in moment (). Format (). Ad esempio, per il tuo caso puoi passare moment.utc(dateTime).format('MMMM D, YYYY').


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

6

Puoi anche usare questo formato:

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


6

Con le versioni più recenti di moment.js puoi anche fare questo:

var dateTime = moment();

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

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


Non sarebbe date: dateTime.date()invece day: dateTime.date()?
philfreo,

1
'chiave giorno e data significano entrambi il giorno del mese.' dai documenti. dayfunziona prima della versione 2.8.4.
oldwizard

6

Ok, quindi so che sono in ritardo alla festa. Come 6 anni di ritardo, ma questo era qualcosa che dovevo capire e che fosse formattato AAAA-MM-GG.

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

È inoltre possibile passare in un parametro come, 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

Ogni volta che utilizzo la moment.jslibreria, specifico il formato desiderato in questo modo:

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

o

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

... ecc. Spero che tu abbia avuto l'idea

All'interno della funzione di formattazione, inserisci il formato desiderato. L'esempio sopra eliminerà tutti gli elementi indesiderati dalla data come minuti e secondi


Questa non è una buona idea se vuoi mai visualizzare i tuoi contenuti in diverse lingue. Se volete date di visualizzazione nel formato corretto per il locale dell'utente, è necessario utilizzare uno dei formati di data prestabilita ( L, LL, ecc)
AJ Richardson

Perché hai impostato MMM tre volte.
Menai Ala Eddine - Aladdin

MMM ti darà le 3 prime lettere del mese. MMMM 'Apr' ti darà un nome completo per il mese
Adrian Grzywaczewski il

4

Per le persone come me vogliono il formato della data lunga ( LLLL) ma senza l'ora del giorno, c'è un problema di GitHub per questo: https://github.com/moment/moment/issues/2505 . Per ora, c'è una soluzione 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 una risposta sensata. Prendi il mio voto signore! Sembra che il problema non sia stato ancora risolto.
oyalhi,

3

Puoi usare questo costruttore

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>


Aggiungi una descrizione del minerale qui
Mathews Sunny

Questo è interessante! Sta creando un momento e sovrascrivendo ora, minuti e secondi ma mantenendo comunque la data di riferimento. Interessante perché avrei indovinato che moment({h:0, m:0, s:0, ms:0})mi avrebbe dato il 1 gennaio 1970 anziché oggi.
Simon_Weaver,

Sembra anche moment({ h: 0 })fare lo stesso.
Simon_Weaver,

1
I documenti diconoOmitted units default to 0 or the current date, month, and year.
Simon_Weaver il

2

Prova questo:

moment.format().split("T")[0]

Fai attenzione con questo metodo, come 1993-06-07T22:00:00.000Zrisulterà come 1993-06-07se fosse l'inizio della giornata di1993-06-08
Tom
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.