formatar data com moment.js

262

Eu tenho uma string neste formato:

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

Gostaria de usar o moment.js para obtê-lo neste formato mm/dd/yyyy : 04/12/2013para exibição.

Eu tentei fazer isso usando esse método,

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

Quais erros e diz there is no such method called replace? Estou abordando isso da maneira errada?

Editar:

Também devo mencionar que estou usando uma versão pré-empacotada do moment.js, empacotada para meteor.js

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

Rastreio de pilha:

 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
fonte
1
Você está usando replace()no seu código? Caso contrário, o plug-in que você está usando está chamando inadequadamente um método inexistente.
precisa saber é o seguinte
Atualizei minha pergunta com erro exato e rastreio de pilha com o método que chama 'substituir'. Eu não estou chamando diretamente de substituir a todos
Warz 13/04

Respostas:

591

O segundo argumento para moment()é um formato de análise em vez de um formato de exibição .

Para isso, você deseja o .format()método :

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

Observe também que o caso é importante. Para mês, dia do mês e ano, o formato deve estar em maiúsculas.

Jonathan Lonowski
fonte
Excelente. Inicialmente, tentei usá-lo como este momento (). Format (), que falhou. Obrigado
Warz
var obj = {data_data: momento ($ scope.activity.endDate) .format ('MM / DD / AAAA')};
Michael J. Calkins
@MichaelCalkins Desculpe. Para que é isso? E, por que a referência adicional ao AngularJS ( $scope)?
Jonathan Lonowski
@JonathanLonowski Isso pode ser qualquer variável. Eu estava programando e procurando essa resposta. Apenas um exemplo.
Michael J. Calkins
Sempre que uso o formato, não consigo ligar para date (). Então eu tive que usar algum tipo de construção de substring para pegar o dia em um formato ("DD-MM-AAAA").
Henk Jansen
49

Inclua moment.js e, usando o código abaixo, você pode formatar sua data

var formatDate= 1399919400000;

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

Minha saída é "13/05/2014"

Akalya
fonte
1
Como posso reverter isso? Quero dizer, se eu tenho o formato posterior e quero alterá-lo para o primeiro.
Arslan Tariq
2
@ArslanTariq que você pode usar momentObject.valueOf()para obter milissegundos a partir da época.
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
fonte
1
Seria bom se você explicasse como esse código resolve o problema do OP.
Robert Columbia
5

Para obter a data final de saída, use format. O argumento do segundo momento é para análise - no entanto, se você o omitir, testDatecausará um aviso de reprovação

Aviso de descontinuação: o valor fornecido não está no formato RFC2822 ou ISO reconhecido ...

para omitir esse aviso, você deve fornecer o formato de análise

Kamil Kiełczewski
fonte
Ótimo, primeiro tenho que fornecer o identificador (formato) do nosso formato de data e depois o formato desejado. bom exemplo.
Sudhir K Gupta