formater la date avec moment.js


262

J'ai une chaîne dans ce format:

var testDate = "Fri Apr 12 2013 19:08:55 GMT-0500 (CDT)"

Je voudrais utiliser moment.js pour l'obtenir dans ce format mm/dd/yyyy : 04/12/2013pour l'affichage.

J'ai essayé de le faire en utilisant cette méthode,

moment(testDate,'mm/dd/yyyy');

Quelles erreurs et dit there is no such method called replace? suis-je en train de l'aborder de la mauvaise façon?

Éditer:

Je dois également mentionner que j'utilise une version préemballée de moment.js, empaquetée pour meteor.js

Object [object Date] has no method 'replace' : The Exact error from the console

Trace de la pile:

 at makeDateFromStringAndFormat (http://127.0.0.1:3000/packages/moment/lib/moment/moment.js?b4e3ac4a3d0794023a4410e7941c3e179398b5b0:539:29)
    at moment (http://127.0.0.1:3000/packages/moment/lib/moment/moment.js?b4e3ac4a3d0794023a4410e7941c3e179398b5b0:652:24)
    at populateProfileForEdit (http://127.0.0.1:3000/client/views/home/administration/directory/profiles/profiles.js?acfff908a6a099f37312f62892a22b40f82e5e0f:147:25)
    at Object.Template.profile_personal.rendered (http://127.0.0.1:3000/client/views/home/administration/directory/profiles/profiles.js?acfff908a6a099f37312f62892a22b40f82e5e0f:130:13)
    at Spark.createLandmark.rendered (http://127.0.0.1:3000/packages/templating/deftemplate.js?b622653d121262e50a80be772bf5b1e55ab33881:126:42)
    at http://127.0.0.1:3000/packages/spark/spark.js?45c746f38023ceb80745f4b4280457e15f058bbc:384:32
    at Array.forEach (native)
    at Function._.each._.forEach (http://127.0.0.1:3000/packages/underscore/underscore.js?867d3653d53e9c7a171483edbcad9670e12288c7:79:11)
    at http://127.0.0.1:3000/packages/spark/spark.js?45c746f38023ceb80745f4b4280457e15f058bbc:382:7
    at _.extend.flush (http://127.0.0.1:3000/packages/deps/deps.js?9642a93ae1f8ffa8eb1c2475b198c764f183d693:231:11) 

1
Utilisez-vous replace()dans votre code? Sinon, le plugin que vous utilisez appelle de manière inappropriée une méthode inexistante.
cereallarceny

J'ai mis à jour ma question avec une erreur exacte et une trace de pile avec la méthode qui appelle «remplacer». Je n'appelle pas du tout directement replace
Warz

Réponses:


591

Le deuxième argument de moment()est un format d' analyse plutôt qu'un format d' affichage .

Pour cela, vous voulez la .format()méthode :

moment(testDate).format('MM/DD/YYYY');

Notez également que cette affaire est importante. Pour le mois, le jour du mois et l'année, le format doit être en majuscules.


Excellent. J'ai d'abord essayé de l'utiliser comme ce moment (). Format (), qui a échoué. Merci
Warz

var obj = {end_date: moment ($ scope.activity.endDate) .format ('MM / DD / YYYY')};
Michael J.Calkins

@MichaelCalkins Désolé. À quoi ça sert? Et, pourquoi la référence supplémentaire à AngularJS ( $scope)?
Jonathan Lonowski

@JonathanLonowski Cela pourrait être n'importe quelle variable. Il m'est arrivé de programmer et de chercher cette réponse. Juste un exemple.
Michael J. Calkins

Chaque fois que j'utilise format, je ne peux pas appeler date () dessus. J'ai donc dû utiliser une sorte de construction de sous-chaîne pour extraire la journée d'un format ("DD-MM-YYYY").
Henk Jansen

49

Incluez moment.js et en utilisant le code ci-dessous, vous pouvez formater votre date

var formatDate= 1399919400000;

var responseDate = moment(formatDate).format('DD/MM/YYYY');

Ma sortie est "13/05/2014"


1
Comment puis-je inverser cela? Je veux dire si j'ai le dernier format et que je veux le changer pour le premier.
Arslan Tariq

2
@ArslanTariq vous pouvez utiliser momentObject.valueOf()pour obtenir des millisecondes de l'époque.
WesternGun

8
moment().format();                                // "2019-08-12T17:52:17-05:00" (ISO 8601, no fractional seconds)
moment().format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Monday, August 12th 2019, 5:52:00 pm"
moment().format("ddd, hA");                       // "Mon, 5PM"

1
Il serait utile que vous expliquiez comment ce code résout le problème de l'OP.
Robert Columbia

5

Pour la date de sortie, utilisez l'utilisation format. L'argument du deuxième moment est pour l'analyse - cependant si vous l'omettez, vous testDateprovoquerez un avertissement de dépréciation

Avertissement de dépréciation: la valeur fournie n'est pas dans un format RFC2822 ou ISO reconnu ...

pour omettre cet avertissement, vous devez fournir un format d'analyse


Très bien, je dois d'abord fournir l'identifiant (format) de notre format de date, puis le format souhaité. bel exemple.
Sudhir K Gupta
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.