форматировать дату с помощью moment.js

262

У меня есть строка в этом формате:

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

Я хотел бы использовать момент.js получить его в этом формате mm/dd/yyyy : 04/12/2013для отображения.

Я пытался сделать это с помощью этого метода,

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

Какие ошибки и говорит there is no such method called replace? я подхожу к этому неправильно?

Редактировать:

Я должен также упомянуть, что я использую предварительно упакованную версию moment.js, упакованную для meteor.js

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

Трассировки стека:

 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
источник
1
Вы используете replace()в своем коде? Если нет, то используемый вами плагин ненадлежащим образом вызывает несуществующий метод.
cereallarceny
Я обновил свой вопрос с точной ошибкой и трассировкой стека с помощью метода, который вызывает «замена». Я прямо не звоню заменить
Варз

Ответы:

591

Вторым аргументом moment()является формат разбора , а не формат отображения .

Для этого вам нужен .format()метод :

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

Также обратите внимание, что дело имеет значение. Для месяца, дня месяца и года формат должен быть в верхнем регистре.

Джонатан Лоновски
источник
Превосходно. Я изначально пытался использовать его как этот момент (). Формат (), но не удалось. Спасибо
Варз
var obj = {end_date: moment ($ scope.activity.endDate) .format ('MM / DD / YYYY')};
Майкл Дж. Калкинс
@MichaelCalkins Извините. Для чего это? И зачем дополнительная ссылка на AngularJS ( $scope)?
Джонатан Лоновски
@JonathanLonowski Это может быть любая переменная. Я случайно программировал и искал этот ответ. Просто пример.
Майкл Дж. Калкинс
Всякий раз, когда я использую формат, я не могу вызвать date () для него. Поэтому мне пришлось использовать какую-то подстроковую конструкцию, чтобы извлечь день из формата ("DD-MM-YYYY").
Хенк Янсен
49

Включите moment.js и используйте приведенный ниже код, чтобы отформатировать дату

var formatDate= 1399919400000;

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

Мой вывод "13/05/2014"

Akalya
источник
1
Как я могу изменить это? Я имею в виду, если у меня есть более поздний формат и я хочу изменить его на первый.
Арслан Тарик
2
@ArslanTariq вы можете использовать, momentObject.valueOf()чтобы получить миллисекунды с эпохи.
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
Было бы полезно, если бы вы объяснили, как этот код решает проблему ОП.
Роберт Колумбия,
5

Для изменения даты выхода используйте format. Второй момент аргумент для парсинга - однако, если вы опустите его, вы testDateвызовете предупреждение об устаревании

Предупреждение об устаревании: предоставленное значение не соответствует распознанному формату RFC2822 или ISO ...

чтобы пропустить это предупреждение, вы должны предоставить формат разбора

Камил Келчевски
источник
Отлично, сначала я должен предоставить идентификатор (формат) нашего формата даты, а затем желать формат. хороший пример
Судхир К Гупта