sformatuj datę za pomocą momentu.js

262

Mam ciąg w tym formacie:

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

Chciałbym użyć moment.js uzyskać go w tym formacie mm/dd/yyyy : 04/12/2013do wyświetlania.

Próbowałem to zrobić za pomocą tej metody,

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

Jakie błędy i mówi there is no such method called replace? czy podchodzę do tego w niewłaściwy sposób?

Edytować:

Powinienem również wspomnieć, że używam wstępnie paczkowanej wersji pliku mom.js, spakowanej dla meteor.js

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

Ślad stosu:

 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
źródło
1
Czy używasz replace()w swoim kodzie? Jeśli nie, używana przez Ciebie wtyczka niewłaściwie wywołuje nieistniejącą metodę.
cereallarceny
Zaktualizowałem moje pytanie dokładnym błędem i śledzeniem stosu metodą, która wywołuje „zamień”. W ogóle nie dzwonię bezpośrednio do wymiany
Warz,

Odpowiedzi:

591

Drugi argument moment()to format parsowania , a nie format wyświetlania .

W tym celu potrzebujesz .format()metody :

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

Pamiętaj też, że sprawa ma znaczenie. W przypadku miesiąca, dnia miesiąca i roku format powinien być pisany wielkimi literami.

Jonathan Lonowski
źródło
Doskonały. Początkowo próbowałem użyć go w tej chwili (). Format (), co nie powiodło się. Dzięki
Warz,
var obj = {data_końcowa: moment ($ scope.activity.endDate) .format ('MM / DD / RRRR')};
Michael J. Calkins,
@MichaelCalkins Przepraszamy. Po co to? I dlaczego dodatkowe odniesienie do AngularJS ( $scope)?
Jonathan Lonowski,
@JathanathanLonowski To może być dowolna zmienna. Zdarzyło mi się programować i szukałem tej odpowiedzi. Tylko przykład.
Michael J. Calkins,
Ilekroć używam formatu, nie mogę na nim wywoływać date (). Musiałem więc użyć jakiegoś konstruktora podciągu, aby wyciągnąć dzień z formatu („DD-MM-RRRR”).
Henk Jansen
49

Dołącz moment.js i korzystając z poniższego kodu możesz sformatować datę

var formatDate= 1399919400000;

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

Moje wyjście to „13.05.2014”

Akalya
źródło
1
Jak mogę to odwrócić? Mam na myśli, jeśli mam późniejszy format i chcę go zmienić na pierwszy.
Arslan Tariq
2
@ArslanTariq możesz użyć, momentObject.valueOf()aby uzyskać milisekundy z epoki.
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
źródło
1
Byłoby pomocne, gdybyś wyjaśnił, w jaki sposób ten kod rozwiązuje problem PO.
Robert Columbia,
5

Do użycia od daty wyjścia format. Argument drugiej chwili dotyczy parsowania - jednak jeśli go pominiesz, testDatespowoduje to ostrzeżenie o wycofaniu

Ostrzeżenie o rezygnacji: podana wartość nie ma rozpoznanego formatu RFC2822 lub ISO ...

aby pominąć to ostrzeżenie, należy podać format parsowania

Kamil Kiełczewski
źródło
Świetnie, najpierw muszę podać identyfikator (format) naszego formatu daty, a następnie pożądany format. niezły przykład.
Sudhir K Gupta,