ค้นหาเว็บไซต์

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));