Cookies nur zwischen bestimmten Zeiten

Hallo zusammen,

ich würde gerne so machen, dass zwischen 7:00 und 18:59 Uhr ein Modal nur alle 15 Minuten angezeigt wird. Zwischen 19:00 und 6:59 soll das Modal jedesmal beim öffnen der Webseite angezeigt wird. Leider funktioniert mein Code nicht:

<script>
		const d = new Date();
		let hour = d.getHours();
		var expires = (new Date(Date.now()+ 900*1000)).toUTCString();

	$(document).ready(function () {
   if (hour > 6 && hour < 19 && document.cookie.indexOf("ModalShown=true")<0) {
    $("#myModal").modal("show");
   document.cookie = "ModalShown=true; expires=" + expires + "; path=/";
}
   else if (hour >= 19  && hour =< 6) {
    $("#myModal").modal("show");
	}
});
</script>

Ich hoffe Ihr könnt mir helfen, danke.

Hi Kamil, was ist denn das für eine Programmiersprache Javascript vllt?

let und var und viele Sachen danach sehen nicht nach Java aus
(zumindest nicht nach Standard Java…)

Debugge es mal, dann siehst du was jede Zeile drin passiert.
Ich wollte es mit eclipse mal anschauen aber wie gesagt, ist KEIN JAVA…

hi,

These:
=< sieht komisch aus, ist das so rum erlaubt?

danach:
wenn du mir eine Zahl nennen kannst, die größer als 19 und kleiner als 6 ist, bin ich ruhig.

grüße
lipi

3 Like
  1. normal solltest du die UND Bedingungen besser einzeln klammern:
    if ( (hour > 6) && (hour < 19) && (document.cookie.indexOf(„ModalShown=true“)>0 ) ) …
  2. gehts es dann eh in den else Zweig weiter, sprich du kannst dir außer bzgl Prüfung mit indexOf das 2. if eh sparen oder du prüfst neu:
    if (! ( (hour > 6) && (hour < 19) ) ) {…}

Hallo Oldy,

danke für Deine Antworten. Java/Javascript sind nicht meine stärken, deshalb nehme/kopiere ich einiges aus dem Internet…

Natürlich hatte Lipi recht mit der Zahl, die größer als 19 sein sollte und gleichzeitig kleiner als 6 sein 🤦 Aus dem Grund habe ich den Code geändert:

<script>
		const d = new Date();
		let hour = d.getHours();
		var expires = (new Date(Date.now()+ 900*1000)).toUTCString();

	$(document).ready(function () {
       if (hour > 7) || (hour < 19) && (document.cookie.indexOf("ModalShown=true")<0) {
        $("#myModal").modal("show");
       document.cookie = "ModalShown=true; expires=" + expires + "; path=/";
    }
       else {
        $("#myModal").modal("show");
	}
});
</script>

Wenn ich das richtig verstehe, die Stunde soll jetzt größer als 7 oder kleiner als 19 sein und kein Cookie erstellt sein, dann wird das Modal gezeigt.
Trotzdem funktioniert es nicht… nichtmal else wird ausgeführt.

Gruß,
kamil

Ja das ODER bringt da keinen Sinn - du willst ja testen auf

7 UND (aber gleichzeitig) auf <19
NUR wenn BEIDE Bedingungen erfüllt, soll dein if es rein lassen in die { … }.

Außerdem fehlen formal die äußeren Klammern:

 if HIER (hour > 7) && (hour < 19) && (document.cookie.indexOf("ModalShown=true")<0) UND HIER {
      
``` if (hour > 7) || (hour < 19) && (document.cookie.indexOf("ModalShown=true")<0) {
    
Achso wenn du auf > 7 gehst, dann kommt erst 8 rein gell?

Noch mal als Beispiel:
4 würde dein ODER in der if Bedingung rein lassen, weil es zwar nicht > 7 ist
aber < 19 … :slight_smile:

hi,

geh nochmal zum Ursprung zurück.

Solang du mehrere Bedingungen mit && verknüpfst, ist alles ok. Alles gleichwertig, da eben alles true sein muss.

Fängst du aber nun an, da ein ODER rein zu setzen, wird es zwar eine Regel geben, wie das interpretiert wird, aber mehr Klammern sind hier besser als weniger Klammern.
Mal abgesehen von den Klammern für die IF-Bedingung selbst.

Überlegung:
Wann willst du ein Modal?

ohne Cookie
und auch
vor 7 Uhr
oder
nach 19 Uhr

if (hour > 7) || (hour < 19) && (document.cookie.indexOf("ModalShown=true")<0)
ergibt:
nach 7 Uhr
oder
vor 19 Uhr //was zusammen quasi jede beliebige Uhrzeit ist, daher zündet else auch nie
und
ohne Cookie

Das hätte einmal alle 15min geklappt, wenn du die nötige Klammer um alle IF-Bedingungen nicht vergessen hättest.

grüße
lipi