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>
normal solltest du die UND Bedingungen besser einzeln klammern:
if ( (hour > 6) && (hour < 19) && (document.cookie.indexOf(„ModalShown=true“)>0 ) ) …
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) ) ) {…}
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.
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?
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.