javascript - ฉันจะเปรียบเทียบสตริงวันที่ได้อย่างไร?
ฉันจำเป็นต้องตรวจสอบว่า วันที่ อยู่ระหว่าง minDate และ maxDate หรือไม่ แต่เมื่อฉันพยายามเปรียบเทียบกับ minDate ฉันควรจะได้ผลถูกต้องเป็น false แต่กลับได้ true
let minDate = "27-05-2019";
let maxDate = "27-05-2019";
let date = "13-02-2018";
var valid;
if(new Date(date.replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3")).toDateString() >= new Date(minDate.replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3")).toDateString()){
valid = true;
} else {
valid = false;
}
console.log(valid);ขอบคุณล่วงหน้า
คำตอบ #1
โซลูชัน JS ธรรมดาพร้อมฟังก์ชันช่วยเหลือสองสามฟังก์ชัน:
const splitMyDateString = str => {
const [day, mon, yr] = str.split('-').map(Number);
return [yr, mon, day];
};
const makeDate = ([yr, mon, day]) => {
return new Date(yr, mon - 1, day);
};
let minDate = makeDate(splitMyDateString("27-05-2019"));
let maxDate = makeDate(splitMyDateString("27-05-2019"));
let date = makeDate(splitMyDateString("13-02-2018"));
let valid = (date >= minDate) && (date <= maxDate);
โปรดทราบว่า constructor ของ Date ไม่มีการรับประกันว่าจะรับสตริงยกเว้นในรูปแบบ ISO 8601 ดังนั้นที่นี่เราจึงส่งค่าจำนวนเต็มแทน และโปรดทราบด้วยว่าเราต้องลบ 1 จากเดือนเนื่องจากเดือนใน JS มีค่า 0-11 ไม่ใช่ 1-12
คำตอบ #2
ใช้ moment.js
isBetween - ลิงก์
moment().isBetween(moment-like, moment-like);
ตัวอย่าง
let minDate = "27-05-2019";
let maxDate = "27-05-2019";
let date = "13-02-2018";
moment(date).isBetween(moment(minDate), moment(maxDate));
