javascript - Kontrollera om en sträng matchar datum?


Om vi har ett textsökfält där användaren skriver 11/25/2014 och vi har en lista med datum:

var dates = [ new Date(2014, 11, 25), new Date(2014, 11, 24) ];

Hur ska vi gå tillväga för att kontrollera om strängen som matats in matchar någon av datumen?

Jag antar att man först skulle se om det faktiskt är ett giltigt datum, eftersom användaren kan ha angett foo och new Date('foo') är ett ogiltigt datum.

Efter det är det några av includes som vi gör med strängar för Javascript Date API?

Svar #1

Du kan formatera datumen med datumfunktioner och konstruera det önskade formatet och jämföra det med indatat datum, leta efter indexet för det formaterade datumet i arrayen med findIndex :

const input = "11/25/2014";

var dates = [new Date(2014, 11, 25), new Date(2014, 11, 24)];

const exists = str => dates.findIndex(date => {
  const day = date.getDate();
  const monthIndex = date.getMonth();
  const year = date.getFullYear();
  
  return `${monthIndex}/${day}/${year}` === str;
}) > -1 ? true : false;

console.log( exists(input) )

Svar #2

Ja, du behöver verifiera att det angivna datumet faktiskt är ett giltigt datum, efter det kan du kontrollera om tidsstämpeln för det angivna datumet matchar med något av datumen i arrayen, det här kan hjälpa dig

const isValidDate = (inputDate, dates) => {
    const now = new Date(inputDate);
    if (isNaN(now)) {
        throw new Error(`${inputDate} is not a valid date`);
        // or return false instead
    }
    // this will return the first date that matches with the input date
    return dates.some(d => d.getTime() === now.getTime());
}

Vänligen kom ihåg att du faktiskt behöver validera formatet för indatat datum, så om datumet måste hålla dd/mm/YYYY måste du validera att indatat datum håller det formatet.