Web

JavaScript: Datum und Wochentag ermitteln und vergleichen

Für eine vom Wochentag abhängige bzw. Zeit-gesteuerte Änderung einer Werbeanzeige auf einem Werbebildschirm musste ich in dem dafür genutzten JavaScript-Code eine entsprechende Abfrage einbauen, um je nach Datum oder Wochentag die anzuzeigenden Bilder festzulegen. In Javascript ist das aber gar nicht so trivial, wie ich dachte.

 

Was ist das Problem?

Es gibt den Datentyp „Date“ in JavaScript, den man auch verwenden muss um an das aktuelle Datum zu gelangen. In diesem Datentyp liegt allerdings auch die Krux, denn man kann ihn nicht einfach mit Vergleichsoperatoren auswerten. Eine if-Abfrage wie beispielsweise

kann man mit diesem Datentyp leider knicken.

Deshalb kann man sich, ohne Zuhilfenahme irgendeines Frameworks, nur damit behelfen, dass man sich einen umformatierten String mit den nötigen Werten aus dem Date-Wert zusammenbaut. Dieser kann dann nach Belieben ausgewertet werden.

 

Datums-Vergleich – Was ist dabei zu beachten?

Mein erster Versuch hat leider nur bedingt funktioniert. Ich hatte mir mit Hilfe der Methoden getFullYear, getMonth und getDate die entsprechenden Werte in einen String im amerikanischen Datumsformat, beispielsweise 2019-10-30, zusammengebaut:

Alles funktionierte super für das gewählte Datum. Am 30. und am 31. wurde der gewünschte Befehl innerhalb der if-Abfrage ausgeführt, weshalb ich mir dazu nicht weiter Gedanken gemacht habe. Lediglich am 01.11. funktionierte das ganze dann schon nicht mehr. Denn, was ich nicht wusste, ist die Tatsache, dass die Funktionen leider nicht den Wert für den Monat und den Tag in zweistelliger Form ausgeben. Somit ist 2019-11-1 (2019111) kleiner als 2019-10-30 (20191030), weshalb das ganze bei der Prüfung dann daneben geht.

Eine Abfrage im folgenden Beispiel funktioniert dann von Anfang an nicht, da die Bedingung (>= 20191030 und =< 2019112) nie erfüllt werden kann:

Der einzige Ausweg bei diesem Lösungansatz wäre wohl eine weitere Umformatierung, sodass die Monats- und Tageszahlen zweistellig werden. Da wollte ich mich aber nicht weiter mit aufhalten. Stattdessen bin ich letzt endlich wie folgt vorgegangen, was ich auch als eine „sauberere“ Lösung ansehe. Ich habe das jeweilige Datum mit Hilfe der Methode „getTime“ nun immer in Millisekunden (angefangen zu zählen ab 01.01.1970) umgewandelt. Dadurch entfällt die Problematik, da die Zahlen nicht mehr zu klein sein können:

 

Wochentagsermittlung – Was ist dabei zu beachten?

Falls man stattdessen den Wochentag benötigt, kommt man an diesen etwas einfacher. Hierzu benötigt man lediglich die Funktion „getDay“ welche einen Wert zwischen 0 und 6 den aktuellen Wochentag ausgibt. Auf diesen zu prüfen ist dann auch denkbar einfach. So z. B. in folgendem Beispiel soll eine bestimmte Aktion nur mittwochs ausgeführt werden:

 

Was sollte man grundsätzlich noch beachten?

Ein wichtiger Punkt, den man nicht vergessen sollte, ist die Tatsache, dass der Wert für das Datum und die Uhrzeit natürlich vom Client-System stammt, auf dem die betroffene Webseite aufgerufen und somit dort der JavaScript-Code ausgeführt wird. Man darf eine solche, rein per normalem JavaScript durchgeführte, Prüfung nicht für kritische Dinge nutzen! Wenn man bspw. das Lösungswort eines Rätsels ab einem gewissen Tag bekannt gibt, sollte man dies nicht wie in den obigen Code-Ausschnitten mittels JavaScript vornehmen. Erstens, weil der Code für einen kundigen Seitenbesucher sowieso einfach einzusehen ist. Zweitens, weil man durch ein falsch eingestelltes oder mit Absicht verstelltes Datum auf dem System des Besuchers natürlich auch bereits das Lösungswort sehen würde.

 

Tobias Langner

Tobias Langner

Ich arbeite seit mehreren Jahren als Software-Release-Manager, zuvor als IT-Administrator, bin ausgebildeter Fachinformatiker für Systemintegration und Studium-"Pausierer" an der FernUni Hagen. Achtung: Für die Richtigkeit der zur Verfügung gestellten Informationen, Skripte, etc. übernehme ich keine Gewähr. Deren Nutzung geschieht ausdrücklich auf eigene Gefahr!

Alle Beiträge ansehen von Tobias Langner →

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert