การเปรียบเทียบวันที่แบบสตริงใน JavaScript
สมมติว่าเรามีสองวันที่ในรูปแบบข้อความดังต่อไปนี้:
let date1 = '2020-12-01';
let date2 = '2019-12-01';
ในกรณีนี้ เราสามารถเปรียบเทียบวันที่ทั้งสองนี้ และทราบได้ว่าวันที่ใดมากกว่า:
console.log(date1 > date2); // จะแสดงผล true
การเปรียบเทียบวันที่เหล่านี้เกิดขึ้นได้อย่างไร? ความจริงก็คือ วันที่ของเราเป็นสตริง และ JavaScript เปรียบเทียบพวกมันในฐานะสตริง นั่นคือมันจะเปรียบเทียบอักขระตัวแรก ของทั้งสองวันที่ก่อน: ถ้าพวกมันเหมือนกัน JavaScript จะเปรียบเทียบอักขระตัวที่สอง และทำเช่นนี้ไปเรื่อยๆ จน กว่าจะพบความแตกต่าง ต้องขอบคุณรูปแบบวันที่ของเราที่ วางปีก่อน ตามด้วยเดือน และวัน วิธีเปรียบเทียบแบบนี้จึงเป็นไปได้
ประเด็นคือ ถ้าหลักปีแรกมีค่ามากกว่า หลักปีที่สอง นั่นหมายความว่าไม่ สำคัญแล้วว่าจะเกิดอะไรขึ้นกับเดือนและวัน - ปีแรกนั้นมากกว่าอย่างแน่นอน หากปีตรงกัน, วันที่ที่มีเดือนมากกว่าจะมีค่ามากกว่า และถ้าเดือนตรงกัน วันที่ที่มีวันมากกว่า จะมีค่ามากกว่า ส่วนถ้าวันตรงกัน วันที่ทั้งสองก็จะเท่ากัน
สิ่งสำคัญอีกอย่างคือ วันที่ต้องอยู่ในรูปแบบเดียวกัน ในกรณีของเรา ตัวคั่นส่วนต่างๆ ของวันที่คือ เครื่องหมายยัติภังค์ ซึ่งแน่นอนว่าไม่จำเป็นเสมอไป ตัวอย่างเช่น สามารถใช้จุดได้:
let date1 = '2020.12.01';
let date2 = '2019.12.01';
หรือแม้แต่เอาเครื่องหมายคั่นออกทั้งหมด:
let date1 = '20201201';
let date2 = '20191201';
สิ่งสำคัญเพื่อให้การเปรียบเทียบถูกต้องคือ ลำดับการวางต้องเป็นดังนี้: ปีก่อน, ตามด้วยเดือน, ตามด้วยวัน
เขียนโค้ดที่เปรียบเทียบวันที่สองรายการด้านล่าง และแสดงข้อความว่าอันไหนมากกว่า:
let date1 = '2020-11-30';
let date2 = '2020-12-01';