format tanggal dengan moment.js

262

Saya memiliki string dalam format ini:

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

Saya ingin menggunakan moment.js mendapatkannya dalam format ini mm/dd/yyyy : 04/12/2013untuk tampilan.

Saya mencoba melakukannya dengan menggunakan metode ini,

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

Kesalahan dan kata yang mana there is no such method called replace? Apakah saya mendekati ini dengan cara yang salah?

Edit:

Saya juga harus menyebutkan bahwa saya menggunakan versi pre packaged moment.js, dikemas untuk meteor.js

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

Jejak Tumpukan:

 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
sumber
1
Apakah Anda menggunakan replace()kode Anda? Jika tidak, plugin yang Anda gunakan tidak tepat memanggil metode yang tidak ada.
cereallarceny
Saya telah memperbarui pertanyaan saya dengan jejak kesalahan dan tumpukan yang tepat dengan metode yang memanggil 'ganti'. Saya tidak secara langsung memanggil ganti sama sekali
Warz

Jawaban:

591

Argumen ke-2 moment()adalah format parsing daripada format tampilan .

Untuk itu, Anda menginginkan .format()metode :

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

Perhatikan juga bahwa kasing penting. Untuk Bulan, Hari Bulan, dan Tahun, formatnya harus huruf besar.

Jonathan Lonowski
sumber
Luar biasa. Saya awalnya mencoba menggunakannya seperti saat ini (). Format (), yang gagal. Terima kasih
Warz
var obj = {end_date: moment ($ scope.activity.endDate) .format ('MM / DD / YYYY')};
Michael J. Calkins
@MichaelCalkins Maaf. Untuk apa itu? Dan, mengapa referensi tambahan ke AngularJS ( $scope)?
Jonathan Lonowski
@ JonathanLonowski Itu bisa berupa variabel apa saja. Saya kebetulan sedang pemrograman dan mencari jawaban ini. Contoh saja.
Michael J. Calkins
Setiap kali saya menggunakan format, saya tidak bisa memanggil date () di atasnya. Jadi saya harus menggunakan semacam konstruksi substring untuk mengambil hari keluar dari format ("DD-MM-YYYY").
Henk Jansen
49

Sertakan moment.js dan menggunakan kode di bawah ini Anda dapat memformat tanggal Anda

var formatDate= 1399919400000;

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

Output saya adalah "13/05/2014"

Akalya
sumber
1
Bagaimana saya bisa membalikkan itu? Maksud saya jika saya memiliki format yang lebih baru dan ingin mengubahnya ke format pertama.
Arslan Tariq
2
@ArslanTariq dapat Anda gunakan momentObject.valueOf()untuk mendapatkan milidetik dari zaman.
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
sumber
1
Ini akan membantu jika Anda menjelaskan bagaimana kode ini memecahkan masalah OP.
Robert Columbia
5

Untuk memulai penggunaan tanggal keluaran format. Argumen momen kedua adalah untuk parsing - namun jika Anda menghilangkannya maka Anda testDateakan menyebabkan peringatan penghentian

Peringatan penghentian: nilai yang diberikan tidak dalam format RFC2822 atau ISO yang diakui ...

untuk menghilangkan peringatan ini, Anda harus memberikan format parsing

Kamil Kiełczewski
sumber
Hebat, pertama saya harus memberikan pengidentifikasi (format) format tanggal kami kemudian format keinginan. contoh yang bagus.
Sudhir K Gupta