• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Wochentag-Rechner

Max Matti

New member
Hi,

Möchte folgendes JS-Script in verschiedenen Browsern getestet haben:

HTML:
<!--
        Wochentag.html
        
        Copyright 2011 Max Staff <max.staff@gmx.de>
        
        This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation; either version 2 of the License, or
        (at your option) any later version.
        
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
        
        You should have received a copy of the GNU General Public License
        along with this program; if not, write to the Free Software
        Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
        MA 02110-1301, USA.
-->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
	<title>Wochentag-Rechner</title>
	<meta http-equiv="content-type" content="text/html;charset=utf-8" />
	<meta name="generator" content="Geany 0.18" />
</head>

<body>
	<p>Bitte gib ein Datum ein:
		<input type="text" value="" id="d" width="2" />.
		<input type="text" value="" id="m" width="2" />.
		<input type="text" value="" id="y" width="4" />
	</p>
	<input type="button" value="Wochentag ermitteln!" onclick="getDay();" />
	<script type="text/javascript">
		function getDay() {
			var d = document.getElementById("d").value;
			var m = document.getElementById("m").value;
			var y = document.getElementById("y").value;
			var datum = new Date();
			datum.setTime(0);
			datum.setYear(y);
			datum.setMonth(m);
			datum.setDate(d);
			var wtag = "";
			switch (datum.getDay()) {
				case 0:
					wtag = "Donnerstag.";
					break;
				case 1:
					wtag = "Freitag.";
					break;
				case 2:
					wtag = "Samstag.";
					break;
				case 3:
					wtag = "Sonntag.";
					break;
				case 4:
					wtag = "Montag.";
					break;
				case 5:
					wtag = "Dienstag.";
					break;
				case 6:
					wtag = "Mittwoch.";
					break;
			}
			var tag = datum.getDate();
			var monat = datum.getMonth();
			if (datum.getDate() < 10) {
				tag = "0" + datum.getDate();
			}
			if (datum.getMonth() == 0) {
				monat = "12";
			} else if (datum.getMonth() < 10) {
				monat = "0" + datum.getMonth();
			}
			var gtag = 0;
			var tage = new Array();
			tage[0] = 31;
			tage[1] = 28;
			tage[2] = 31;
			tage[3] = 30;
			tage[4] = 31;
			tage[5] = 30;
			tage[6] = 31;
			tage[7] = 31;
			tage[8] = 30;
			tage[9] = 31;
			tage[10] = 30;
			tage[11] = 31;
			for (var i = 0; i < parseInt(monat)-1; i++) {
				gtag += tage[i];
			}
			gtag += datum.getDate();
			if ((datum.getYear() % 4 == 0 && (datum.getYear() % 100 != 0 || datum.getYear() % 400 == 100)) && parseInt(monat) > 2) {
				gtag++;
			}
			alert("Der " + tag + "." + monat + "." + (datum.getYear()+1900) + " war ein " + wtag + "\nAusserdem war es der " + gtag + ". Tag im Jahr " + (datum.getYear()+1900) + ".");
		}
	</script>
</body>
</html>

Weiss nicht, wie das hier so abläuft...

Einfach eine HTML-Datei anlegen (z.b. "Wochentag.html") , mit einem Texteditor öffnen, Text hineinkopieren, speichern, mit Browser öffnen.

Ich habs unter Ubuntu 11.04 Natty Narwhal mit Firefox 7.0b getestet und es funktioniert so, wie es soll.

Erklären kann ich es auch gern, aber nur auf Anfrage (Edit: Bin zu faul, nen Aufsatz zu schreiben, den Nachher eh keiner liest). Die Kommentare im Script hab ich rausgenommen, um es kürzer zu machen.

lg
Max
 
Zuletzt bearbeitet:
Hi,

klappt auch unter Win XP, mit FF 6.0.2.

Sowas kannste aber eig. auch selber testen. Einfach eine virtuelle Maschine installieren und dort dann die verschiedenen Browser installieren. (IE7-9, FF, Opera, Chrome, Safari)

Gruß
 
Liefert bei mir falsche Werte, danach der 8.9.2011 ein Mittwoch und der 8.Tag im Jahr 2011.
 
Da ist einiges falsch: getDay() liefert bei Sonntag 0 ... Samstag 6 und getMonth liefert bei Januar 0 ... Dezember 11
Außerdem werden die Schaltjahre falsch berechnet, da du dich auf getYear und nicht getFullYear verlässt.
Ansonsten verstehe ich den Sinn des Skriptes nicht so ganz - wo doch jeder moderne Rechner einen internen Kalender hat, der auch meistens nicht besonders schwer zu erreichen ist.

@jspit: du bekommst Mittwoch, weil der 8.10.2011 ein Samstag ist ;)
EDIT: und weil parseInt ohne Basis verwendet wird, bekommst du den 8. Tag.
EDIT2: Das Ganze auch noch mit einem copyright zu versehen, finde ich etwas ironisch...
 
Zuletzt bearbeitet:
... und für setMonth beginnt die Zählung auch bei 0, so daß schon vor dem switch von Anfang an mit einem falschen Datum operiert wird.
 
@kkapsner: Der erste Kommentar kommt automatisch in meinem Editor, wenn ich eine neue Datei anlege.
getYear gibt bei 0 bei 1900 zurück und alle andern Zahlen werden dementsprechend angepasst. Wenn du dir meine Schaltjahr-Funktion mal genauer ansiehst, siehst du, dass ich sie dementsprechend angepasst habe (die einzige Änderung ist in der letzten Bedingung der if-Abfrage, da wird überprüft, ob das Jahr % 400 100 ergibt).
Bei den Funktionen getDay und getMonth habe ich mich wohl falsch informiert, bei den Daten, die ich eingegeben habe, hat es allerdings funktioniert.
@rico: Hab zwar ne Virtuelle Maschine, die läuft aber nur sehr langsam, da mein pc nicht gerade der beste ist und ich hab da auch nur WinXP

den rest beantworte ich später, wenn ich mehr Zeit habe...
 
OK - das mit dem "== 100" hab' ich übersehen... ABER nicht alle Browser verwenden bei getYear die Jahresreferenz 1900. Verwende einfach getFullYear - das reagiert in allen Browsern gleich und liefert auch noch ein sinnvolles Ergebnis (111 für 2011 ist einfach dämlich - Y2K ist doch wirklich lang genug her)
Wo bitte hast du dich denn informiert, dass da so ein Schrot steht? Ist hald toll, wenn das Skript nur für den August 2011 (OK - wahrscheinlich auch noch für ein paar andere Monate) funktioniert...
... und die Jahrestagszählung nur von Januar bis Juli und Oktober bis Dezember funktioniert. (Warum du da mit einem String und parseInt arbeitest erschließt sich mir auch nicht so wirklich.)
 
Also ich hatte keine Lust mich bei der Jahrestagrechnung mit dem 0er im Dezember rumzuschlagen und hab daher einfahc die Werte aus der Variable genommen, wo es schon richtig drin steht. Das fällt aber jetzt raus, weil ich eh alles um 1 verschiebe.
Ich glaube es ist schlauer, wenn ich mich erstmal um die Verschiebung kümmere und ihr dann die neue Version kritisiert, vlt fällt mir dann auch noch was anderes auf.
Ich hatte nur für meinen Geburtstag getestet, da ich da den Wochentag weiss (und für 1 anderen Tag, den ich aber nicht überprüfen konnte), daher sind mir die Fehler nicht aufgefallen. Und die Quelle (hab meine Chronik durchforstet) hat mittlerweile geschlossen, d.h. der Server existiert nicht mehr.
 
Diese Quelle existiert zu Recht nicht mehr.

Aber überarbeite das Ganze noch mal - uns fällt dann sicherlich was zum kritisieren auf ;)
 
HTML:
<!--
        Wochentag.html
        
        Copyright 2011 Max Staff <max.staff@gmx.de>
        
        This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation; either version 2 of the License, or
        (at your option) any later version.
        
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
        
        You should have received a copy of the GNU General Public License
        along with this program; if not, write to the Free Software
        Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
        MA 02110-1301, USA.
-->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
	<title>Wochentag-Rechner</title>
	<meta http-equiv="content-type" content="text/html;charset=utf-8" />
	<meta name="generator" content="Geany 0.18" />
</head>

<body>
	<p>Bitte gib ein Datum ein:
		<input type="text" value="" id="d" width="2" />.
		<input type="text" value="" id="m" width="2" />.
		<input type="text" value="" id="y" width="4" />
	</p>
	<input type="button" value="Wochentag ermitteln!" onclick="getDay();" />
	<script type="text/javascript">
		<!--
		var check;
		function getDay() {
			if (check) {
				document.getElementsByTagName("body")[0].removeChild(check);
				check = null;
			}
			var d = document.getElementById("d").value;
			var m = document.getElementById("m").value - 1;
			var y = document.getElementById("y").value;
			if (y < 100) {
				check = document.createElement("div");
				check.innerHTML = "Welches Jahr meinten sie? <br \/>";
				check.innerHTML += "<input type='button' id='jahr' value='19" + y + "' onclick='document.getElementById(\"y\").value = 19 + document.getElementById(\"y\").value;getDay();' \/><br \/>"
				check.innerHTML += "<input type='button' id='jahr' value='20" + y + "' onclick='document.getElementById(\"y\").value = 20 + document.getElementById(\"y\").value;getDay();' \/><br \/>"
				check.innerHTML += "<input type='button' id='jahr' value='anderes Jahr.' onclick='document.getElementById(\"y\").value = prompt(\"Bitte geben sie die vollständige Jahreszahl ein!\");getDay();' \/><br \/>"
				document.getElementsByTagName("body")[0].appendChild(check);
				return;
			}
			var datum = new Date();
			datum.setTime(0);
			datum.setFullYear(y);
			datum.setMonth(m);
			datum.setDate(d);
			var wtag = "";
			switch (datum.getDay()) {
				case 0:
					wtag = "Sonntag.";
					break;
				case 1:
					wtag = "Montag.";
					break;
				case 2:
					wtag = "Dienstag.";
					break;
				case 3:
					wtag = "Mittwoch.";
					break;
				case 4:
					wtag = "Donnerstag.";
					break;
				case 5:
					wtag = "Freitag.";
					break;
				case 6:
					wtag = "Samstag.";
					break;
			}
			var tag = datum.getDate();
			var monat = datum.getMonth() + 1;
			if (datum.getDate() < 10) {
				tag = "0" + datum.getDate();
			}
			if (datum.getMonth() < 9) {
				monat = "0" + (datum.getMonth() + 1);
			}
			var gtag = 0;
			var tage = new Array();
			tage[0] = 31;
			tage[1] = 28;
			tage[2] = 31;
			tage[3] = 30;
			tage[4] = 31;
			tage[5] = 30;
			tage[6] = 31;
			tage[7] = 31;
			tage[8] = 30;
			tage[9] = 31;
			tage[10] = 30;
			tage[11] = 31;
			for (var i = 0; i < datum.getMonth(); i++) {
				gtag += tage[i];
			}
			gtag += datum.getDate() + 1;
			if ((datum.getFullYear() % 4 == 0 && (datum.getFullYear() % 100 != 0 || datum.getFullYear() % 400 == 0)) && parseInt(monat) > 2) {
				gtag++;
			}
			if (datum.getFullYear() > 3000) {
				alert("Der " + tag + "." + monat + "." + datum.getFullYear() + " wird ein " + wtag + "\nAusserdem wird es der " + gtag + ". Tag im Jahr " + datum.getFullYear() + " sein, falls bis dahin mit dem Gregorianischen Kalender weitergerechnet wird.");
			} else if (datum.getTime() > new Date().getTime()) {
				alert("Der " + tag + "." + monat + "." + datum.getFullYear() + " wird ein " + wtag + "\nAusserdem wird es der " + gtag + ". Tag im Jahr " + datum.getFullYear() + " sein.");
			} else {
				alert("Der " + tag + "." + monat + "." + datum.getFullYear() + " war ein " + wtag + "\nAusserdem war es der " + gtag + ". Tag im Jahr " + datum.getFullYear() + ".");
			}
		}
		//-->
	</script>
</body>
</html>

Das ist die überarbeitete Version.
Angepasst:
Tag korrekt in Datumsfunktion eingegeben,
Jahreszahl korrekt eingeben hinzugefügt, aber noch nicht überprüft,
switch für die Wochentage angepasst,
Tag korrekt aus Datum herausgeholt,
if für die Monate angepasst,
Schaltjahrfunktion an getFullYear() angepasst.
alert an getFullYear() angepasst,
alert an Zeit angepasst.
 
Zuletzt bearbeitet:
Also bei mir ist es der erste...
Aber mir fällt gerade auf, dass beim übertragen eine Zeile nicht mitgekommen ist: direkt vor den alerts am schluss hab ich in meinem lokalen code noch ein "gtag--;" zu stehen, was das ausgleicht.
 
... was aber nicht nötig wäre, wenn du nicht bei getDate eins dazuzählen würdest...

Was mich auch noch stört ist, dass du nicht überprüfst, ob auch ein valides Datum eingegeben wurde (probier' doch einfach mal aus, was passiert, wenn du 30.2.2011 eingibst).
 
Nö - das musst du per Hand machen (also erst mal auf Zahlen allgemein prüfen - dann kannst du das ganze in ein Date-Objekt reintun und dann überprüfen, ob die entwprechenden get...-Funktionen auch das Gewünschte zurückliefern).
 
HTML:
<!--
        Wochentag.html

        Copyright 2011 Max Staff <max.staff@gmx.de>

        This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation; either version 2 of the License, or
        (at your option) any later version.

        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public License
        along with this program; if not, write to the Free Software
        Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
        MA 02110-1301, USA.
-->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
	<title>Wochentag-Rechner</title>
	<meta http-equiv="content-type" content="text/html;charset=utf-8" />
	<meta name="generator" content="Geany 0.18" />
</head>

<body>
	<p>Bitte gib ein Datum ein:
		<input type="text" value="" id="d" width="2" />.
		<input type="text" value="" id="m" width="2" />.
		<input type="text" value="" id="y" width="4" />
	</p>
	<input type="button" value="Wochentag ermitteln!" onclick="getDay();" />
	<script type="text/javascript">
		<!--
		var check;
		function getDay() {
			var tage = new Array();
			tage[0] = 31;
			tage[1] = 28;
			tage[2] = 31;
			tage[3] = 30;
			tage[4] = 31;
			tage[5] = 30;
			tage[6] = 31;
			tage[7] = 31;
			tage[8] = 30;
			tage[9] = 31;
			tage[10] = 30;
			tage[11] = 31;
			var schaltjahr = (datum.getFullYear() % 4 == 0 && (datum.getFullYear() % 100 != 0 || datum.getFullYear() % 400 == 0)) && parseInt(monat) > 2;
			if (check) {
				document.getElementsByTagName("body")[0].removeChild(check);
				check = null;
			}
			var d = document.getElementById("d").value;
			var m = document.getElementById("m").value - 1;
			var y = document.getElementById("y").value;
			if (y < 100) {
				check = document.createElement("div");
				check.innerHTML = "Welches Jahr meinten sie? <br \/>";
				check.innerHTML += "<input type='button' id='jahr' value='19" + y + "' onclick='document.getElementById(\"y\").value = 19 + document.getElementById(\"y\").value;getDay();' \/><br \/>"
				check.innerHTML += "<input type='button' id='jahr' value='20" + y + "' onclick='document.getElementById(\"y\").value = 20 + document.getElementById(\"y\").value;getDay();' \/><br \/>"
				check.innerHTML += "<input type='button' id='jahr' value='anderes Jahr.' onclick='document.getElementById(\"y\").value = prompt(\"Bitte geben sie die vollständige Jahreszahl ein!\");getDay();' \/><br \/>"
				document.getElementsByTagName("body")[0].appendChild(check);
				return;
			}
			if (schaltjahr) {
				tage[1]++;
			}
			if (d > tage[m]) {
				alert("Ungültiges Datum angegeben!");
				return;
			}
			var datum = new Date();
			datum.setTime(0);
			datum.setFullYear(y);
			datum.setMonth(m);
			datum.setDate(d);
			var wtag = "";
			switch (datum.getDay()) {
				case 0:
					wtag = "Sonntag.";
					break;
				case 1:
					wtag = "Montag.";
					break;
				case 2:
					wtag = "Dienstag.";
					break;
				case 3:
					wtag = "Mittwoch.";
					break;
				case 4:
					wtag = "Donnerstag.";
					break;
				case 5:
					wtag = "Freitag.";
					break;
				case 6:
					wtag = "Samstag.";
					break;
			}
			var tag = datum.getDate();
			var monat = datum.getMonth() + 1;
			if (datum.getDate() < 10) {
				tag = "0" + datum.getDate();
			}
			if (datum.getMonth() < 9) {
				monat = "0" + (datum.getMonth() + 1);
			}
			var gtag = 0;
			for (var i = 0; i < datum.getMonth(); i++) {
				gtag += tage[i];
			}
			gtag += datum.getDate();
			var add;
			if (datum.getFullYear() > 3000) {
				add = confirm("Der " + tag + "." + monat + "." + datum.getFullYear() + " wird ein " + wtag + "\nAusserdem wird es der " + gtag + ". Tag im Jahr " + datum.getFullYear() + " sein,\nfalls bis dahin mit dem Gregorianischen Kalender weitergerechnet wird.\nMöchten sie ein Datum hinzuaddieren?");
			} else if (datum.getTime() > new Date().getTime()) {
				add = confirm("Der " + tag + "." + monat + "." + datum.getFullYear() + " wird ein " + wtag + "\nAusserdem wird es der " + gtag + ". Tag im Jahr " + datum.getFullYear() + " sein.\nMöchten sie ein Datum hinzuaddieren?");
			} else {
				add = confirm("Der " + tag + "." + monat + "." + datum.getFullYear() + " war ein " + wtag + "\nAusserdem war es der " + gtag + ". Tag im Jahr " + datum.getFullYear() + ".\nMöchten sie ein Datum hinzuaddieren?");
			}
			if (add == true) {
				var day = prompt("Wieviele Tage möchten sie hinzuaddieren?");
				var month = prompt("Wieviele Monate möchten sie hinzuaddieren?");
				var year = prompt("Wieviele Jahre möchten sie hinzuaddieren?");
				datum.setDate(datum.getDate() + parseInt(day));
				datum.setMonth(datum.getMonth() + parseInt(month));
				datum.setFullYear(datum.getFullYear() + parseInt(year));
				alert("Das Ergebnis ist: " + datum.getDate() + "." + (datum.getMonth() + 1) + "." + datum.getFullYear() + ".");
			}
		}
		//-->
	</script>
</body>
</html>

Die ganze Schaltjahres-Sache ist glaub ich so auch vereinfacht.
 
Zurück
Oben