JohnnyHatEinProblem: Wiederholen (repeat) einer Liste (array)

Hi,

ich habe mir ein iPhone Theme zurecht gebastelt und unter anderem zeigt mein Lockscreen eine HTML CSS basierte Uhr an. Jetzt ist alles soweit fertig, es stört nur noch eine Kleinigkeit, die ich selber leider nicht beheben kann: Im Datumscontainer wird die Vorschau mit "undefined" statt Januar beschrieben (siehe Bild)

Was muss ich umschreiben, damit da nicht mehr undefined steht?

Danke für eure Hilfe!!

		function calculateDate() {  
			var months = new Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");  
			var currentTime = new Date();  
			var day1 = (currentTime.getDate() - 1).toString();  
			var day2 = currentTime.getDate().toString();  
			var day3 = (currentTime.getDate() + 1).toString();  
			var month = currentTime.getMonth();  
  
			if (day1.length == 1) { day1 = "0" + day1; }  
			if (day2.length == 1) { day2 = "0" + day2; }  
			if (day3.length == 1) { day3 = "0" + day3; }  
  
			document.getElementById("date1-1").innerText = months[month - 1];  
			document.getElementById("date1-2").innerText = months[month];  
			document.getElementById("date1-3").innerText = months[month + 1];  
  
			document.getElementById("date2-1").innerText = day1;  
			document.getElementById("date2-2").innerText = day2;  
			document.getElementById("date2-3").innerText = day3;  
		}  
  
		calculateTime();  
		calculateDate();  
		setInterval(calculateTime, 2000);  
		setInterval(calculateDate, 60000);  
		  
	</script>
  1. Hallo JohnnyHatEinProblem,

    ... "undefined" statt Januar...

      	document.getElementById("date1-3").innerText = months[month + 1];  
    

    month hat im Dezember den Wert 11. Hier greifst du auf das 12. Element des Arrays months zu, das es nicht gibt. Abhilfe wäre z.B die Modulo-Division % oder eine if-Abfrage.

    Gruß, Jürgen

    1. Guten Abend JürgenB,

      danke für die schnelle Antwort! Leider sind mir beide Begriffe unbekannt, habe trotzdem versucht den richtigen Weg aus einer if-Abfrage weiter oben im Script abzuleiten, leider ohne Erfolg. Wäre es umständlich den Teil kurz zu schreiben? Ich glaube das Erklären würde noch länger dauern ;-)

      Vielen Dank!

      1. Hallo JohnnyHatEinProblem,

        ... beide Begriffe unbekannt ...

        dann solltest du das ändern.

        Die Modulo-Division (%) ermittelt bei einer Division von ganzen Zahlen den Rest:

        5 % 3 ergibt 2, 2 % 3 ergibt ebenfalls 2 und 12 % 12 ergibt 0.

        document.getElementById("date1-3").innerText = months[(month + 1) % months.length];

        sollte dein Problem lösen.

        Gruß, Jürgen

        1. Ja das Programmieren habe ich bis jetzt vermieden, aber so langsam komme ich da nicht mehr drum rum.

          Vielen Dank für die Erklärung sowie die Lösung des Problems, funktioniert einwandfrei!

          Einen schönen Abend noch!

          1. Hi,

            Vielen Dank für die Erklärung sowie die Lösung des Problems, funktioniert einwandfrei!

            Dir ist auch klar geworden, daß Du im Januar dasselbe Problem mit dem Vormonat bekommen wirst?

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            O o ostern ...
            Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
            1. Hallo MudGuard,

              Dir ist auch klar geworden, daß Du im Januar dasselbe Problem mit dem Vormonat bekommen wirst?

              wobei der Modulo-Operator hier kläglich versagt. Eine if-Abfrage ist hier doch die bessere Lösung.

              Gruß, Jürgen