Überprüfen Sie, ob ein Datum zwischen zwei Daten liegt


78

Ich muss überprüfen, ob a date- eine Zeichenfolge im dd/mm/yyyyFormat - zwischen zwei anderen Daten mit demselben Format liegtdd/mm/yyyy

Ich habe es versucht, aber es funktioniert nicht:

var dateFrom = "02/05/2013";
var dateTo = "02/09/2013";
var dateCheck = "02/07/2013";

var from = Date.parse(dateFrom);
var to   = Date.parse(dateTo);
var check = Date.parse(dateCheck );

if((check <= to && check >= from))      
    alert("date contained");

Ich habe den Debugger verwendet und überprüft, ob die Variablen tound fromeinen isNaNWert haben. Kannst du mir helfen?


Daniel, du musst die richtige Antwort aktualisieren. Die Antwort mit mehr Stimmen sucht nicht nur für Monate nach Daten

Antworten:


103

Date.parseunterstützt das Format mm/dd/yyyynicht dd/mm/yyyy. Verwenden Sie für letztere entweder eine Bibliothek wie moment.js oder führen Sie die folgenden Schritte aus

var dateFrom = "02/05/2013";
var dateTo = "02/09/2013";
var dateCheck = "02/07/2013";

var d1 = dateFrom.split("/");
var d2 = dateTo.split("/");
var c = dateCheck.split("/");

var from = new Date(d1[2], parseInt(d1[1])-1, d1[0]);  // -1 because months are from 0 to 11
var to   = new Date(d2[2], parseInt(d2[1])-1, d2[0]);
var check = new Date(c[2], parseInt(c[1])-1, c[0]);

console.log(check > from && check < to)

2
+1, um die Datumszeichenfolge korrekt zu analysieren und nicht einem implementierungsabhängigen Parser zu überlassen.
RobG

2
Berücksichtigen Sie die DB-Konventionen. Das erste Datum sollte inklusive sein. zBcheck >= from && check < to
Onur Yıldırım

@Diode check: 02/23/2018 von: 11/20/2018 bis: 12/31/2018 gibt true zurück.
Chudasamachirag

2
@chudasamachirag: Die Frage betraf das Parsen des TT / MM / JJJJ-Formats. Diese Daten sind im Format MM / TT / JJJJ
Diode

47

Vergleichen Sie die getTime () -Werte des Datums, anstatt die Daten direkt zu vergleichen. Die Funktion getTime () gibt die Anzahl der Millisekunden seit dem 1. Januar 1970 als Ganzzahl zurück. Dies sollte trivial sein, um festzustellen, ob eine Ganzzahl zwischen zwei anderen Ganzzahlen liegt.

Etwas wie

if((check.getTime() <= to.getTime() && check.getTime() >= from.getTime()))      alert("date contained");

NaNhat weder eine GetTimenoch eine getTimeMethode?
Bergi

2
Es wird perfekt funktionieren, wenn das Datumsformat wie - 02/05/2013 ist, aber wenn das Datum im ISO-Format (Datum + Uhrzeit) wie - 2019-09-12T13: 02: 14.291Z ist, dann verwenden Sie die setHours- Methode, bevor Sie Daten vergleichen, z - let compareDate = new Date('checkDate').setHours(0, 0, 0, 0); let startDate = new Date('startDate').setHours(0, 0, 0, 0); let endDate = new Date('endDate').setHours(0, 0, 0, 0); console.log(compareDate <= endDate && compareDate >= startDate); Hoffe, es wird anderen helfen :)
Sayan Samanta

16

Versuchen Sie, was unten ist. Es wird dir helfen...

Geige: http://jsfiddle.net/RYh7U/146/

Skript :

if(dateCheck("02/05/2013","02/09/2013","02/07/2013"))
    alert("Availed");
else
    alert("Not Availed");

function dateCheck(from,to,check) {

    var fDate,lDate,cDate;
    fDate = Date.parse(from);
    lDate = Date.parse(to);
    cDate = Date.parse(check);

    if((cDate <= lDate && cDate >= fDate)) {
        return true;
    }
    return false;
}

WTH ist der Unterschied?
Bergi

2
@Bergi: Wenn das Datum NANdann diese Funktion ist return FalseAlso Date you check Or Passist das Not Availedoder In Validund das ist der HÖLLEN Unterschied zwischen meinem Code und ihm
Pandian

Aber die If-Bedingung des OP macht das auch? Und die Frage war über das Datum Wesen NaN an erster Stelle (die es nicht in allen Browsern ist)
Bergi

Was passiert , wenn ich wollte , ob überprüfen nowfallen unter 7:00amzu9:00pm
Si8

dateCheck ("20/01/2015", "22/01/2015", "21/02/2015") dieser Fall funktioniert nicht
Bhavin Rana

9

Die Antwort mit 50 Stimmen prüft das Datum nicht nur monatelang. Diese Antwort ist nicht richtig. Der folgende Code funktioniert.

var dateFrom = "01/08/2017";
var dateTo = "01/10/2017";
var dateCheck = "05/09/2017";

var d1 = dateFrom.split("/");
var d2 = dateTo.split("/");
var c = dateCheck.split("/");

var from = new Date(d1);  // -1 because months are from 0 to 11
var to   = new Date(d2);
var check = new Date(c);

alert(check > from && check < to);

Dies ist der Code, der in einer anderen Antwort veröffentlicht wurde, und ich habe die Daten geändert. Auf diese Weise habe ich festgestellt, dass er nicht funktioniert

var dateFrom = "02/05/2013";
var dateTo = "02/09/2013";
var dateCheck = "07/07/2013";

var d1 = dateFrom.split("/");
var d2 = dateTo.split("/");
var c = dateCheck.split("/");

var from = new Date(d1[2], parseInt(d1[1])-1, d1[0]);  // -1 because months are from 0 to 11
var to   = new Date(d2[2], parseInt(d2[1])-1, d2[0]);
var check = new Date(c[2], parseInt(c[1])-1, c[0]);


alert(check > from && check < to);

2

Ich habe eine Anpassungsfunktion erstellt, um zu überprüfen, ob das angegebene Datum zwischen zwei Daten liegt oder nicht.

var getvalidDate = function(d){ return new Date(d) }

function validateDateBetweenTwoDates(fromDate,toDate,givenDate){
    return getvalidDate(givenDate) <= getvalidDate(toDate) && getvalidDate(givenDate) >= getvalidDate(fromDate);
}

1

Vereinfachte Vorgehensweise basierend auf der akzeptierten Antwort.

In meinem Fall musste ich überprüfen, ob das aktuelle Datum (Heute) den Bereich von zwei anderen Datumsangaben festlegt, sodass newDate () anstelle von fest codierten Werten verwendet wird. Sie können jedoch feststellen, wie Sie fest codierte Daten verwenden können.


var currentDate = new Date().toJSON().slice(0,10);
var from = new Date('2020/01/01');
var to   = new Date('2020/01/31');
var check = new Date(currentDate);

console.log(check > from && check < to);


0

Versuche dies:

HTML

<div id="eventCheck"></div>

JAVASCRIPT

// ----------------------------------------------------//
// Todays date
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();

// Add Zero if it number is between 0-9
if(dd<10) {
    dd = '0'+dd;
}
if(mm<10) {
    mm = '0'+mm;
}

var today = yyyy + '' + mm + '' + dd ;


// ----------------------------------------------------//
// Day of event
var endDay = 15; // day 15
var endMonth = 01; // month 01 (January)
var endYear = 2017; // year 2017

// Add Zero if it number is between 0-9
if(endDay<10) {
    endDay = '0'+endDay;
} 
if(endMonth<10) {
    endMonth = '0'+endMonth;
}

// eventDay - date of the event
var eventDay = endYear + '/' + endMonth + '/' + endDay;
// ----------------------------------------------------//



// ----------------------------------------------------//
// check if eventDay has been or not
if ( eventDay < today ) {
    document.getElementById('eventCheck').innerHTML += 'Date has passed (event is over)';  // true
} else {
    document.getElementById('eventCheck').innerHTML += 'Date has not passed (upcoming event)'; // false
}

Geige: https://jsfiddle.net/zm75cq2a/


0

Hier ist eine in Typoskript geschriebene Date Prototype-Methode:

Date.prototype.isBetween = isBetween;
interface Date { isBetween: typeof isBetween }
function isBetween(minDate: Date, maxDate: Date): boolean {
  if (!this.getTime) throw new Error('isBetween() was called on a non Date object');
  return !minDate ? true : this.getTime() >= minDate.getTime()
    && !maxDate ? true : this.getTime() <= maxDate.getTime();
};

0

Ich habe das Gleiche getan wie @Diode, die erste Antwort, aber ich habe die Bedingung mit einer Reihe von Daten erfüllt. Ich hoffe, dass dieses Beispiel für jemanden nützlich sein wird

zB (der gleiche Code zum Beispiel mit Array von Daten)

var dateFrom = "02/06/2013";
var dateTo = "02/09/2013";

var d1 = dateFrom.split("/");
var d2 = dateTo.split("/");

var from = new Date(d1[2], parseInt(d1[1])-1, d1[0]);  // -1 because months are from 0 to 11
var to   = new Date(d2[2], parseInt(d2[1])-1, d2[0]); 



var dates= ["02/06/2013", "02/07/2013", "02/08/2013", "02/09/2013", "02/07/2013", "02/10/2013", "02/011/2013"];

dates.forEach(element => {
   let parts = element.split("/");
   let date= new Date(parts[2], parseInt(parts[1]) - 1, parts[0]);
        if (date >= from && date < to) {
           console.log('dates in range', date);
        }
})


0

Angenommen, Ihr Datum kommt zum Beispiel so und Sie müssen momentjs für Funktionen für das Vorabdatum installieren.

let cmpDate = Thu Aug 27 2020 00:00:00 GMT+0530 (India Standard Time)

    let format = "MM/DD/YYYY";
    let startDate: any = moment().format(format);
    let endDate: any = moment().add(30, "days").format(format);
    let compareDate: any = moment(cmpDate).format(format);
    var startDate1 = startDate.split("/");
    var startDate2 = endDate.split("/");
    var compareDate1 = compareDate.split("/");

    var fromDate = new Date(startDate1[2], parseInt(startDate1[1]) - 1, startDate1[0]);
    var toDate = new Date(startDate2[2], parseInt(startDate2[1]) - 1, startDate2[0]);
    var checkDate = new Date(compareDate1[2], parseInt(compareDate1[1]) - 1, compareDate1[0]);

    if (checkDate > fromDate && checkDate < toDate) {
      ... condition works between current date to next 30 days
    }

-1

Versuche dies

var gdate='01-05-2014';
        date =Date.parse(gdate.split('-')[1]+'-'+gdate.split('-')[0]+'-'+gdate.split('-')[2]);
        if(parseInt(date) < parseInt(Date.now()))
        {
            alert('small');
        }else{
            alert('big');
        }

Geige

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.