2017-12-12 3 views
-4

Lets Also sage ich das Datum (in diesem EXACT STRING FORMAT)Wie überprüfe ich, ob ein Datum zwischen zwei Bereichen liegt (ReactJS/JavaScript)?

2017-4-28 

und die Termine

2017-4-20 
2017-5-16 

Wie würde ich überprüfen, ob das erste zwischen den beiden ist?

EDIT: Diese beiden STRINGS

+0

können Sie 'moment.js' oder' javascript date object' verwenden. – ram1993

+0

@ Adriani6 Sie können tatsächlich '<' and '>' gegen 'Date' Objekte direkt verwenden, müssen nicht' getTime() ' – samanime

+0

@samanime Nie wusste, danke dafür. Wir lernen jeden Tag etwas Neues;) – Adriani6

Antwort

2

const date = new Date('2017-4-28'); 
 
const start = new Date('2017-4-20'); 
 
const end = new Date('2017-5-16'); 
 

 
if (date > start && date < end) { 
 
    console.log('in between'); 
 
} else { 
 
    console.log('outside'); 
 
}

Wie bei den meisten Dingen beteiligt Termine sind, ist es am besten, sie zu Date Objekte zu konvertieren. Das Format, das Sie verwenden, kann direkt analysiert werden, so dass es einfach ist, nur new Date(dateStr).

Danach ist es einfach, sie zu vergleichen. Die < und > Operatoren arbeiten an Date Objekten genau so, wie Sie es erwarten, also können Sie einfach date > start und date < end überprüfen.

+0

"* Wie bei den meisten Dingen mit Datumsangaben ... *" In diesem Fall ist es einfacher, die Strings mit [* localeCompare *] zu vergleichen (https://developer.mozilla.org/en-US/docs/Web/JavaScript/ Reference/Global_Objects/String/localeCompare), müssen Sie nicht auf den integrierten Parser zurückgreifen (der notorisch unzuverlässig ist). – RobG

+0

Eigentlich mit diesem exakten Format würde das nicht funktionieren, weil '2017-12-01' wie vorher '2017-2-01' angezeigt würde, da sie in keinem Fall einen zweistelligen Monat verwenden. Und während ich zustimme, dass der Parser knifflig sein kann, würde ich sagen, dass die große Mehrheit der Browser zumindest das 'YYYY-MM-DD'-Format korrekt erhält. – samanime

+0

Ja, Sie haben mit dem * localCompare * Recht, ich habe die fehlerhafte Zeichenfolge übersehen. Es geht nicht um "die große Mehrheit", die Zeichenfolge ist nicht ISO 8601 gültig, daher können Browser entweder versuchen, es als etwas anderes zu analysieren oder ein ungültiges Datum zurückgeben. Es ist eine Lotterie, welches Ergebnis Sie erhalten, einschließlich ob es als UTC oder lokal geparst wird (was für den Vergleich nicht wichtig ist, aber in anderen Fällen). – RobG

Verwandte Themen