Javaskript - Datum zwischen zwei Zeitangeben

Bennyaa

Lieutenant
Registriert
März 2007
Beiträge
828
Hallo, wie kann ich denn am einfachsten Prüfen, ob das aktuelle Datum zwischen zwei Bereichen liegt?

Ich möchte dabei kein wirkliches Datum mit Jahr zum Prüfen angeben, sondern lediglich so etwas bspw.:

dateIsBetween(10.3.,15.11);
oder:

dateIsBetween(16.11.,9.3);
also nur Startdatum mit tag und Monat und das gleiche für das Enddatum.
 
Mach doch ein "Fake"-Jahr hin...
Die Frage, ob ein Tag zwischen zwei "Zeitangaben" liegt macht ohne ein Jahr einfach gar keinen Sinn. Wieso nicht gleich noch den Monat weglassen?

Liegt der 31.12. zwischen dem 1.6 und dem 24.12.?

und wie soll deine dateIsBetween mit 2 Parametern funktionieren?

Ansonsten kannst du ja auch ganz stupide die Monate mit z.B. mindestens 31 multiplizieren und den Tag addieren, und dann einfach einen Int-Vergleich. Schaltjahre usw spielen da gar keine Rolle, du willst ja nicht die Anzahl der Tage.
Wenn Enddatum dann kleiner als Startdatum ist, dann halt aufs Enddatum wohl noch (mindestens 12*31 = ) 372 drauf addieren.

Edit:
Ach zwei Paramter, weil es um "heute" geht.
 
Zuletzt bearbeitet:
function dateIsBetween(lowerDay,lowerMonth, upperDay, upperMonth) {

const d = new Date();
const dw = d.getMonth * 31 + d.getDate();
return lowerMonth * 31 + lowerDay < dw && dw < upperMonth * 31 + upperDay;

}
 
Zuletzt bearbeitet: (typo: getDay liefert tag der Woche getDate liefert Tag des Monats)
@r0b0t:
ich würde sagen eher so (ungetestet):
Code:
function dateIsBetween(lowerDay, lowerMonth, upperDay, upperMonth) {
    const d = new Date();
    const dw = d.getMonth * 31 + d.getDay();
    const lowerBounds = lowerMonth * 31 + lowerDay;
    var upperBounds = upperMonth * 31 + upperDay;
    if (upperBounds < lowerBounds) {
        // upper is in next year
        upperBounds += 372;
    }
    return lowerBounds < dw && dw < upperBounds;
}
 
Ich verstehe nicht ganz was der Vergleich von Tag.Monat bringen soll, wenn kein Jahr dabei ist. Das ergibt keinen Sinn.

Wie auch immer, wenn man es unbedingt so machen möchte, kann man doch einfach implizit das aktuelle Jahr dranhängen, daraus ein "echtes" Datum machen und anschließend einfach mit < und > prüfen ob das zu prüfende Datum dazwischen liegt oder nicht.

Hier wird haarklein erklärt wie man in javascript Datumsvergleiche anstellen kann. Einfach aus den Funktionsparametern wie im Beispiel aus #1 10.3. vs 15.11. ein Datum 10.3.2023 sowie 15.11.2023 machen und einfach wie im Link gezeigt vergleichen, fertig. Aufpassen muss man lediglich bei Schalttagen, das ist klar, gilt aber für jede Lösung, weil ein Vergleich ungültiger Daten natürlich recht sinnfrei ist.
 
  • Gefällt mir
Reaktionen: pas06, Micke und BeBur
Wenn das Datum schon als Datumsobjekt vorliegt würde ich damit weiterarbeiten, so wie hier schon Beispiele gegeben wurden. Wenn es aber nur ein String ist, könnte man daraus auch Integers machen und einfach Zahlen miteinander vergleichen (ähnlich wie @tollertyp schon geschrieben hat)? Also in etwa so:

Javascript:
if (310 < /*Mein Datum in MonatTag*/ < 1115) {...}

Wenn Daten öfters verarbeitet werden, nehme ich ansonsten auch gerne DayJS das bringt schon Vergleichs-Funktionen mit.
 
Zurück
Oben