Comment puis-je supprimer l'heure de la date avec Moment.js?

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

Il affiche: "28 février 2013 09:24"

Mais je voudrais supprimer le temps à la fin. Comment puis je faire ça?

J'utilise Moment.js .

Obsivus
la source
Utilisez la méthode Split pour séparer les chaînes
AmGates

Réponses:

605

Désolé de sauter si tard, mais si vous souhaitez supprimer la partie temporelle d'un moment()plutôt que de le formater , le code est:

.startOf('day')

Réf: http://momentjs.com/docs/#/manipulating/start-of/

Graham Charles
la source
90
Soyez prudent avec cela si vous vous déplacez entre les fuseaux horaires (ou si vous ne faites pas attention aux fuseaux horaires). J'ai eu un problème où ma date UTC était convertie en heure locale, puis postulait startOf('day'), ce qui était alors le début de la journée précédente . Corrigé avecmoment(moment.utc('2013-10-29T00:00:00+00:00').startOf('day').format('LL')).startOf('day').toDate()
colllin
26
Veillez également à ce que cette fonction mute réellement l'objet d'origine
Dirk Boer
6
.startOf('day')ne supprime pas la partie de temps en soi, il définit simplement l'heure à 00:00:00. Donc, oui, comme l'a commenté «collin», vous devez être prudent lors de la sauvegarde de la date. Une meilleure alternative utilise format('LL'), comme cela a été répondu dans ce fil.
Sudarshan_SMD
4
Pour éviter de muter l'objet d'origine, utilisez someMoment.clone().startOf('day')ou moment(someMoment).startOf('day').
Pang
Attention, startOf ('jour') réinitialise tout et ne règle pas seulement l'heure à 00:00:00. moment().utc().add(1,'d').startOf('day')réinitialisera l'objet à aujourd'hui.
Tristan
51

Utilisation format('LL')

Selon ce que vous essayez d'en faire, cela format('LL')pourrait faire l'affaire. Cela produit quelque chose comme ceci:

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

La bonne façon serait de spécifier l'entrée selon vos besoins, ce qui vous donnera plus de flexibilité.

La présente définition comprend les éléments suivants

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'

Vous pouvez utiliser n'importe lequel de ces éléments ou modifier l'entrée passée dans moment (). Format (). Par exemple, pour votre cas, vous pouvez passer moment.utc(dateTime).format('MMMM D, YYYY').

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

Vous pouvez également utiliser ce format:

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

Hashmita Raut
la source
6

Avec les nouvelles versions de moment.js, vous pouvez également faire ceci:

var dateTime = moment();

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

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

Torben Rahbek Koch
la source
Ne serait-ce pas date: dateTime.date()au lieu de day: dateTime.date()?
philfreo
1
«jour et date désignent tous deux le jour du mois.» des documents. dayfonctionne avant la version 2.8.4.
oldwizard
6

D'accord, donc je sais que je suis en retard à la fête. Comme 6 ans de retard, mais c'était quelque chose que j'avais besoin de comprendre et de le mettre en forme AAAA-MM-JJ.

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

Vous pouvez également passer un paramètre tel que , 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
la source
4

Chaque fois que j'utilise la moment.jsbibliothèque, je spécifie le format souhaité de cette façon:

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

ou

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

... etc j'espère que vous avez l'idée

Dans la fonction de formatage, vous mettez le format souhaité. L'exemple ci-dessus supprimera tous les éléments indésirables de la date tels que les minutes et les secondes

Adrian Grzywaczewski
la source
Ce n'est pas une bonne idée si vous souhaitez afficher votre contenu dans différents paramètres régionaux. Si vous souhaitez afficher les dates dans le format correct pour les paramètres régionaux de l'utilisateur, vous devez utiliser l' un des formats de date prédéfinie ( L, LL, etc.)
AJ Richardson
Pourquoi vous avez défini MMM trois fois.
Menai Ala Eddine - Aladdin
MMM vous donnera les 3 premières lettres du mois. "Apr" MMMM vous donnera un nom complet du mois
Adrian Grzywaczewski
4

Pour les gens comme moi qui veulent le format de date longue ( LLLL) mais sans l'heure, il y a un problème GitHub pour cela: https://github.com/moment/moment/issues/2505 . Pour l'instant, il existe une solution:

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
la source
1
Enfin une réponse sensée. Prenez mon upvote monsieur! Le problème n'a pas encore été résolu, il semble.
oyalhi
3

Vous pouvez utiliser ce constructeur

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
la source
Ajoutez une description du minerai ici
Mathews Sunny
C'est intéressant! Cela crée un moment et remplace l'heure, les minutes et les secondes tout en conservant la date sous-jacente. Intéressant car j'aurais deviné que cela moment({h:0, m:0, s:0, ms:0})m'aurait donné le 1er janvier 1970 plutôt qu'aujourd'hui.
Simon_Weaver
Ressemble également à moment({ h: 0 })la même chose.
Simon_Weaver
1
Les docs disentOmitted units default to 0 or the current date, month, and year.
Simon_Weaver
2

Essaye ça:

moment.format().split("T")[0]
Keith Blanchard
la source
Attention à cette méthode, comme 1993-06-07T22:00:00.000Zil en résultera alors 1993-06-07que c'est le début de la journée de1993-06-08
Tom