Hat jemand eine Idee, warum dieses Javascript für Halloween falsch zählt? Ich bekomms einfach nicht hin, damit die Zahl der Tage stimmt, bei Weihnachten und so geht es, aber nicht bis zum 31 Oktober, da zeigt er immer die falsche Tageszahl an. Hier immer einen Tag zu wenig. Ich geb den Code mal komplett mit meinem CSS dazu, aber es geht nur ums zählen, wo liegt hier der Fehler?
<script type="text/javascript"> var today=new Date() var theoccasion=new Date(today.getFullYear(), 10, 30) var beforeOccasionText="bis Halloween" var onOccasiontext="Heute ist Halloween" var monthtext=new Array("Jan","Feb","März","April","Mai","Juni","Juli","Aug","Sept","Okt","Nov","Dez") theoccasion.setMonth(theoccasion.getMonth()-1) var showdate="("+monthtext[theoccasion.getMonth()]+" "+theoccasion.getDate()+")" var one_day=1000*60*60*24 var calculatediff="" calculatediff=Math.ceil((theoccasion.getTime()-today.getTime())/(one_day)) if (calculatediff<0){ var nextyeartoday=new Date() nextyeartoday.setFullYear(today.getFullYear()+1) calculatediff=Math.ceil((nextyeartoday.getTime()-today.getTime())/(one_day)+calculatediff) } var pluraldayornot=(calculatediff==1)? "Tag" : "Tage" if (calculatediff>0) document.write("<b>Noch "+calculatediff+" "+pluraldayornot+" "+beforeOccasionText+" !</b>") else if (calculatediff==0) document.write(".·:*¨¨*:·. <b>"+onOccasiontext+"</b> .·:*¨¨*:·.") </script>
Der Monat fängt bei JavaScript mit 0 an. Du solltest also immer 1 von dem Monat abziehen, wenn du ihn von der üblichen Form in JavaScript umwandeln möchtest. Wenn du die Zeit bis zum 30. Oktober finden möchtest, musst du 9 verwenden.
1 2
var today = new Date(); var theoccasion=new Date(today.getFullYear(), 9, 30);
Du kannst JavaScript-Code übrigens auch in die Entwicklerkonsole testen (F12 --> Konsole). Wenn du den Code dort einfügst und anschließend die Variable "theoccasion" eingibst, sollte das richtige Datum erscheinen.
Das Problem ist aber (mal abgesehen davon, dass es der 31.10 ist), hatte ich falsch eingesetzt, dann sagt er ja 51 statt 50 Tage. Gebe ich die 9 ein, sagt er noch 20 Tage bis Halloween , es sind aber noch 50 Tage. 50 Tage zählt er nicht. Warum stimmt es bis Weihnachten 24.12 und auch Herbstanfang 22.09 ist richtig, nur 31 Oktober macht er nicht korrekt.
Es liegt an einer falschen Annahme im Skript. Das Skript ist anscheinend darauf ausgelegt, den Monat in gewohnter Form eingeben zu können. Standardmäßig sieht JavaScript new Date(today.getFullYear(), 10, 31) als den 1. Dezember, da der 31. November nicht existiert. Später wird im Skript versucht, mit theoccasion.setMonth(theoccasion.getMonth()-1) den Monat zu korrigieren. Das führt in dem Fall allerdings nicht zu dem gewünschten Ergebnis, da wir den 1. Tag vom übernächsten Monat und nicht <gewünschter Monat + 1> haben.
Du kannst Zeile 34 also entfernen und die Zahl vorher subtrahieren.
Folgendes Skript sagt, dass wir 50 Tage bis Halloween haben:
1 2 3 4 5 6 7 8 9
var today=new Date() var theoccasion=new Date(today.getFullYear(), 10 - 1, 31) var beforeOccasionText="bis Halloween" var onOccasiontext="Heute ist Halloween" var monthtext=new Array("Jan","Feb","März","April","Mai","Juni","Juli","Aug","Sept","Okt","Nov","Dez") var showdate="("+monthtext[theoccasion.getMonth()]+" "+theoccasion.getDate()+")" var one_day=1000*60*60*24 var calculatediff="" calculatediff=Math.ceil((theoccasion.getTime()-today.getTime())/(one_day))
Oh je, vielen Dank... das versteht sich so beim Lesen irgendwie erstmal nicht, aber es funktioniert! Würde also heißen, für Weihnachten wäre der erste Code schon richtig dann wieder?
Ja, für Weihnachten würde der erste Code gehen. Nur ab dem 28. kann es zu Fehlern kommen.
In dem Fall kannst du den Code aus Beitrag #4 nutzen. Dort kannst du statt der 10 den Monat und statt der 31 den Tag eintragen, den du haben möchtest. Das - 1 sollte trotzdem dort stehen bleiben.
Hallo Nara, ich finde, dass die Eingabe des Datums recht einfach sein sollte, um einfach Fehler zu vermeiden. Da finde ich die Xobor-Plugins einfach super, besonders dann, wenn eine Eingabeoberfläche vorhanden ist! Aber nicht immer lohnt sich der Aufwand! Das folgende Skript hat verschiedene Funktionen und sogar eine kleine Fehlerausgabe bei falschen Datumseingaben! Vielleicht kannst Du da etwas mit anfangen....
Wichtig! Zu beachten ist, dass beim Tageszähler verbleichende Stunden noch als 1 Tag anzeigt werden!
×
Klasse Webseite
Klasse Webseite
Was kann das Skript:
Numerische Eingabe von Tag, Monat und Jahr (Zeile 37-38)! Namentliche Monatseingabe mit den ersten 3 Buchstaben auch möglich, allerdings in Englisch! Kritisch für März ("mar" = March), Mai ("may" = May), Oktober ("oct" =October) und Dezember ("dec" = December)!
Einfache Eingabe des zukünftigen Ereignisses (Zeile 39)!
Kleine Fehlerausgabe bei falschen Datumsangaben oder falschen Zeichen!
Getrennter Skriptaufbau (Style, Div-Container, JavaScript) - Ohne "document.write"!
var Tag = 31 var Monat = 10 // auch möglich (engl.): "Jan", "Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" var Jahr = 2021 var Ereignis = "Halloween"
var datum = new Date(''+Monat+' '+Tag+', '+Jahr+' 00:00:00 GMT'); var time = new Date(); var count = Math.floor((datum.getTime() - time.getTime()) / 1000); count = Math.floor(count / (60*60*24)+1);
if (count == 0) { $("#countdownTime").html(".·:*¨¨*:·. <b>Heute ist "+Ereignis+"!</b> .·:*¨¨*:·."); } else { var TagCount = (count > 1) ? "Tage" : "Tag" $("#countdownTime").html("<b>Noch "+count+" "+TagCount+" bis "+Ereignis+"</b>"); } if (count < 0) { $("#countdownTime").html("<b>"+Ereignis+" ist vorbei!</b>"); } if ($("#countdownTime:contains('NaN')").length > 0) { $("#countdownTime").html("<b><i>Fehler bei der Datumseingabe!</i</b>"); }
Hallo Nara, hatte das Skript aus Beitrag #7 nur im Business-Template (v4) getestet! Im Xobor (v6) wurde das Skript nicht richtig geladen! Es kommen noch 2 Zeilen dazu.
<script type='text/javascript'> /* Erstellt mit dem Countdown-Generator - Homepage-Total.de */ /* Die Monatsnamen bitte in englisch eintragen (Monatsname, Tag, Jahr, Uhrzeit) */ var end = new Date('October 31, 2021 00:00:00');
function toSt2(n) { var s = ''; if (n < 10) { s += '0'; } return (s + n).toString(); }
function toSt3(n) { var s = ''; if (n < 10) { s += '00'; } else if (n < 100) { s += '0'; } return (s + n).toString(); }
function countdown() { var d = new Date(); var count = Math.floor(end.getTime() - d.getTime()); if (count > 0) { var miliseconds = toSt3(count%1000); count = Math.floor(count/1000); var seconds = toSt2(count%60); count = Math.floor(count/60); var minutes = toSt2(count%60); count = Math.floor(count/60); var hours = toSt2(count%24); count = Math.floor(count/24); var days = count; document.getElementById('c0').innerHTML = 'noch'; document.getElementById('c1').innerHTML = days + ' TAGE'; document.getElementById('c2').innerHTML = hours + ':' + minutes + ':' + seconds setTimeout('countdown()', 100); } else { document.getElementById('c3').innerHTML = '†•heute<br> ist Halloween!•†'; } } countdown(); </script>