จัดรูปแบบวันที่ด้วย moment.js


262

ฉันมีสตริงในรูปแบบนี้:

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

ฉันต้องการใช้ moment.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) 

1
คุณใช้replace()ในรหัสของคุณหรือไม่ ถ้าไม่ใช่ปลั๊กอินที่คุณใช้กำลังเรียกวิธีการที่ไม่มีอยู่อย่างไม่เหมาะสม
cereallarceny

ฉันได้อัปเดตคำถามของฉันด้วยข้อผิดพลาดที่แน่นอนและการติดตามสแต็กด้วยวิธีการที่เรียกว่า 'แทนที่' ฉันไม่ได้โทรแทนโดยตรงเลย
Warz

คำตอบ:


591

อาร์กิวเมนต์ที่ 2 moment()คือการแยกรูปแบบมากกว่าการแสดงผลรูปแบบ

สำหรับสิ่งที่คุณต้องการ.format()วิธีการ :

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

ยังทราบว่ากรณีที่ไม่สำคัญ สำหรับเดือนวันของเดือนและปีรูปแบบควรเป็นตัวพิมพ์ใหญ่


ยอดเยี่ยม ตอนแรกฉันพยายามใช้มันเหมือนช่วงเวลานี้ (). รูปแบบ () ซึ่งล้มเหลว ขอบคุณ
Warz

var obj = {end_date: สักครู่ ($ scope.activity.endDate) .format ('MM / DD / YYYY')};
Michael J. Calkins

@MichaelCalkins ขออภัย มีไว้เพื่ออะไร และทำไมการอ้างอิงเพิ่มเติมถึง AngularJS ( $scope)
Jonathan Lonowski

@JonathanLonowski นั่นอาจเป็นตัวแปรใด ๆ ฉันบังเอิญได้เขียนโปรแกรมและค้นหาคำตอบนี้ เป็นเพียงตัวอย่าง
Michael J. Calkins

เมื่อใดก็ตามที่ฉันใช้รูปแบบฉันไม่สามารถเรียก date () กับมัน ดังนั้นฉันจึงต้องใช้สตริงย่อยบางชนิดเพื่อดึงวันออกจากรูปแบบ ("DD-MM-YYYY")
Henk Jansen

49

รวม moment.js และใช้รหัสด้านล่างคุณสามารถจัดรูปแบบวันที่ของคุณ

var formatDate= 1399919400000;

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

ผลลัพธ์ของฉันคือ "13/05/2014"


1
ฉันจะย้อนกลับได้อย่างไร ฉันหมายถึงถ้าฉันมีรูปแบบในภายหลังและต้องการเปลี่ยนเป็นรูปแบบแรก
Arslan Tariq

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
มันจะช่วยถ้าคุณอธิบายว่ารหัสนี้แก้ปัญหาของ OP ได้อย่างไร
Robert Columbia

5

สำหรับ fromating formatใช้วันที่เอาท์พุท อาร์กิวเมนต์ช่วงเวลาที่สองมีไว้สำหรับการแยกวิเคราะห์ - อย่างไรก็ตามถ้าคุณข้ามไปคุณtestDateจะทำให้เกิดคำเตือนการคัดค้าน

คำเตือนการเลิกใช้: ค่าที่ให้ไม่ได้อยู่ในรูปแบบ RFC2822 หรือ ISO ที่รู้จัก ...

หากต้องการข้ามคำเตือนนี้คุณควรจัดรูปแบบการแยกวิเคราะห์


เยี่ยมมากก่อนอื่นฉันต้องให้ตัวระบุ (รูปแบบ) ของรูปแบบวันที่ของเราจากนั้นจัดรูปแบบความปรารถนา ตัวอย่างที่ดี
Sudhir K Gupta
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.