NEWS
Aktuelles Datum größer als eingegebenes Datum
-
Hallo ihr
Ich möchte gerne ein eingegebenes Datum mit dem Aktuellem Datum vergleichen. Leider klappt dies nicht so ganz.
schedule("* * * * * *", async function () { if ('15.04.2022' <= formatDate(new Date(), "DD.MM.YYYY")) { console.log('test'); } });
Wie würdet ihr dies Lösen ??
-
@pat
So machst du einen String Vergleich und ist bei einem deutschen Datum nicht für größer kleiner Vergleich geeignet.Da das Datum auf deutsch vorliegt musst du es erst parsen damit man es vergleichen kann.
Entweder du teilst die einzelnen Bestandteile selbst auf und wandelst es über jahr monat Tag in den datentyp date um
Oder du verwendest eine Bibliothek die das für dich macht.
Hier bspw mit der weit verbreiteten Bibliothek momentum
https://stackoverflow.com/questions/48222291/convert-a-german-date-to-iso-date -
var date_aktuelle_Uhrzeit = getDateObject(formatDate(new Date(), "hh:mm:ss")); if(getDateObject('07:30:00') < date_aktuelle_Uhrzeit){ log('xxx') }
Ich vergleiche Datumswerte miteinander das funktioniert bei mir. Mann kann es aber auch mit Variable.getTime() in eine Zahl umwandeln und dann eine Zahl vergleichen.
-
@cash
du vergleichst keine Datumswerte, sondern Uhrzeiten.
Da die Darstellung international sehr ähnlich ist (hh:mm:ss), gibt es da weniger Probleme.
Auch weil bei einer Uhrzeit die höherwertige Angabe jeweils links steht, kann man hier stringvergleich verwenden.Die internationale Darstellung eines Datums sieht da schon anders aus
DE: DD:MM:YY
EN: YY-MM-DD
(ganz geschweige die verschiedenen kalender-typen, die es auf der welt gibt, westlich, islam, diverse asiatische)
(ach zeitzonen fällt mir da auch noch ein)Bei einem englischen Datum kann man ebenfalls Stringvergleich machen, bei einem deutschen halt nicht, weil der höherwertige Wert (Jahr) ganz rechts steht.
Leider kennt der Date.parse-Befehl nur die englischen Formen + ein paar technische Formen
Hoffnung macht hier das neue temporal-object und i18n object in javascript, welche aktuell in Abstimmung zur Einführung sind.
Solange, muss man Bibliotheken verwenden oder aufwändig das selbst umsetzen.
-
Dank dir. Hat mir weiter geholfen. Es war schon zuspät an dem Abend
Werde dann eine Lösung noch rein stellen für die anderen die auch mal das Prob haben. -
Hallo hier meine Lösung
geht bestimmt noch eleganter
function datum vergleich(){ let a_tag = parseInt(formatDate(new Date(), "DD")); let a_month = parseInt(formatDate(new Date(), "MM")); let a_year = parseInt(formatDate(new Date(), "YYYY")); let a_datum_us = new Date(new Date(a_year,a_month,a_tag).toDateString()); let len_date = getState(daten_len).val; for (let i = 0; i<len_date; i++){ let abholdate = getState(a_daten).val[i].abholdatum.split('.'); let tag = parseInt(abholdate[0]); let month = parseInt(abholdate[1]); let year = parseInt(abholdate[2]); let datum_us = new Date(new Date(year,month,tag).toDateString()); if(datum_us >= a_datum_us){ console.log('Das datum ist in der Zukunft'); } } }
-
Also, ein
tempDatum = "2022-05-22 22:17:00"; dateinsec = getDateObject(tempDatum).getTime();
gibt die aktuelle Zeit in Millisekunden seit dem 1.1.1970 zurück
Auf jeden Fall die Zeit als eine Zahl.Mit der kann man prima rechnen oder vergleichen
-
@pat Wenn Du die moments Bibliothek nutzt dann kannst Du mit after und before über einen Boolean einfach prüfen.