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) 
Warz
la source
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.

Jonathan Lonowski
la source
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"

Akalya
la source
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"
Avinash Sharma
la source
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

Kamil Kiełczewski
la source
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