อัปเดตปี 2558
มันเป็นคำถามเก่า แต่มีคำถามใหม่ ๆ เช่น:
ถูกปิดเหมือนรายการที่ซ้ำกันดังนั้นฉันคิดว่ามันสำคัญที่จะเพิ่มข้อมูลใหม่ที่นี่ ฉันเขียนเพราะฉันกลัวว่าคนอื่น ๆ จะคัดลอกและวางรหัสที่โพสต์ไว้ที่นี่และใช้มันเพื่อการผลิต
ส่วนใหญ่คำตอบที่นี่ทั้งใช้บางส่วนแสดงออกปกติที่ซับซ้อนที่ตรงกับรูปแบบเพียงบางส่วนเท่านั้นที่เฉพาะเจาะจงมากและจริงทำมันไม่ถูกต้อง (เช่นการจับคู่ที่ 32 มกราคมในขณะที่ไม่ตรงกับวันที่ ISO ที่เกิดขึ้นจริงตามที่โฆษณา - ดูการสาธิต ) หรือที่พวกเขาพยายามที่จะผ่านอะไรกับDate
คอนสตรัคและ ขอให้ดีที่สุด
ใช้ช่วงเวลา
ดังที่ฉันอธิบายไว้ในคำตอบนี้ขณะนี้มีห้องสมุดสำหรับสิ่งนั้น:
Moment.js
มันเป็นห้องสมุดที่จะแยกวิเคราะห์ตรวจสอบจัดการและแสดงวันที่ใน JavaScript ที่มี API ที่สมบูรณ์ยิ่งกว่าฟังก์ชั่นการจัดการวันที่ JavaScript มาตรฐาน
มันลดขนาด 12kB / gzipped และทำงานใน Node.js และสถานที่อื่น ๆ :
bower install moment --save # bower
npm install moment --save # npm
Install-Package Moment.js # NuGet
spm install moment --save # spm
meteor add momentjs:moment # meteor
การใช้ช่วงเวลาคุณสามารถเจาะจงมากเกี่ยวกับการตรวจสอบวันที่ที่ถูกต้อง บางครั้งมันเป็นสิ่งสำคัญมากที่จะเพิ่มเบาะแสบางอย่างเกี่ยวกับรูปแบบที่คุณคาดหวัง ตัวอย่างเช่นวันเช่น 06/22/2015 ดูเหมือนวันที่ที่ถูกต้องเว้นแต่ว่าคุณจะใช้รูปแบบ DD / MM / YYYY ซึ่งในกรณีนี้วันที่ควรถูกปฏิเสธว่าไม่ถูกต้อง มีหลายวิธีที่คุณสามารถบอก Moment ว่าคุณคาดหวังรูปแบบใดเช่น:
moment("06/22/2015", "MM/DD/YYYY", true).isValid(); // true
moment("06/22/2015", "DD/MM/YYYY", true).isValid(); // false
true
อาร์กิวเมนต์เป็นมีดังนั้นช่วงเวลาจะไม่พยายามที่จะแยกอินพุตถ้ามันไม่ได้ว่าสอดคล้องกับหนึ่งในรูปแบบที่ให้ไว้ (มันควรจะเป็นพฤติกรรมเริ่มต้นในความคิดของฉัน)
คุณสามารถใช้รูปแบบที่จัดให้ภายใน:
moment("2015-06-22T13:17:21+0000", moment.ISO_8601, true).isValid(); // true
และคุณสามารถใช้หลายรูปแบบเป็นอาร์เรย์:
var formats = [
moment.ISO_8601,
"MM/DD/YYYY :) HH*mm*ss"
];
moment("2015-06-22T13:17:21+0000", formats, true).isValid(); // true
moment("06/22/2015 :) 13*17*21", formats, true).isValid(); // true
moment("06/22/2015 :( 13*17*21", formats, true).isValid(); // false
ดู: DEMO
ห้องสมุดอื่น ๆ
หากคุณไม่ต้องการใช้ Moment.js ก็มีห้องสมุดอื่นด้วย:
อัพเดทปี 2016
ฉันสร้างimmomentโมดูลที่เป็นเหมือน (ส่วนหนึ่งของ) ช่วงเวลา แต่ไม่มีความผิดที่เกิดจากการกลายพันธุ์ของวัตถุที่มีอยู่ (ดูเอกสารสำหรับข้อมูลเพิ่มเติม)
อัพเดต 2018
วันนี้ฉันแนะนำให้ใช้Luxonสำหรับการจัดการวันที่ / เวลาแทน Moment ซึ่ง (ไม่เหมือนกับ Moment) ทำให้วัตถุไม่เปลี่ยนรูปทั้งหมดดังนั้นจึงไม่มีความประหลาดใจที่น่ารังเกียจเกี่ยวกับการกลายพันธุ์โดยอ้อมของวันที่
ข้อมูลเพิ่มเติม
ดูสิ่งนี้ด้วย:
ชุดบทความโดย Rob Gravelle ในห้องสมุดแยกวิเคราะห์วันที่ของ JavaScript:
บรรทัดล่าง
แน่นอนว่าทุกคนสามารถลองปรับแต่งวงล้อเขียนนิพจน์ปกติ (แต่โปรดอ่าน ISO 8601 และ RFC 3339 ก่อนที่คุณจะทำจริง ๆ ) หรือโทรหา buit-in constructors ที่มีข้อมูลแบบสุ่มเพื่อแยกวิเคราะห์ข้อความผิดพลาดเช่น'Invalid Date'
(คุณแน่ใจหรือไม่ว่าข้อความนี้เหมือนกันทุกแพลตฟอร์มในทุกพื้นที่หรือไม่ในอนาคต?) หรือคุณสามารถใช้โซลูชันที่ทดสอบแล้วและใช้เวลาของคุณในการปรับปรุงไม่ต้องบูรณาการซ้ำ ไลบรารีทั้งหมดที่ระบุในที่นี้เป็นซอฟต์แวร์โอเพนซอร์ซ