(Hallo|Hi(ho)|Tag) Sonja ,
heute habe ich mal richtig viele Fragen :-) . Die nächste ist anhand eines Datums Format (DD.MM.JJJJ) einen Wochentag zu bestimmen.
Ich vermute ich muss zuerst den Sting zerlegen in Tag, Monat Jahr zerlegen also.
... und dann muss ich einen Reffernezpunkt sezten und Zählen oder gibt es da eine einfachere Variante?
Du könntest für beide Aufgaben das Date-Objekt benutzen, wenn du den Datumsstring in einem "vernünftigen"
Format (wie ISO-8601) vorliegen hättest:
var mydate = new Date(Date.parse('2010-01-10'));
var dayoftheweek = mydate.getDay();
Allerdings bin ich mir nicht sicher, ob das Date.parse() eines jeden Browsers mit Daten umgehen kann,
die über einen 32-Bit-Timestamp hinausgehen (ca. 1970 bis 2037). Das Date-Objekt selbst kann das aber.
Das Zerlegen eines im deutschsprachigen Raum üblichen Datumsstrings kann man sich selbst basteln:
var datestring = String("9.1.2010");
// parse date string -day---- -month-- -year-
var matches = datestring.match(/^[^\d]*(\d{1,2})[^\d]+(\d{1,2})[^\d]+(\d{4})([^\d]|$)/);
// set date object
var mydate = new Date();
mydate.setFullYear(parseInt(matches[3]));
mydate.setMonth(parseInt(matches[2]) - 1); // months count from 0...11
mydate.setDate(parseInt(matches[1]));
// get day of the week 0...6 (sunday, monday, ..., saturday)
var dayoftheweek = mydate.getDay();
DateJS hat das Zerlegen des Datumsstrings für viele Sprachen schon eingebaut.
Christian Zeller und Carl Friedrich Gauss haben sich mit diesem Problem beschäftigt und Algorithmen entwickelt,
mit denen man Wochnentage einfach berechnen konnte, lange bevor jemand an Javascript dachte. ;-)
Sie lassen sich trotzdem leicht in eine Javascript-Funktion umsetzen:
http://de.wikipedia.org/wiki/Zellers_Kongruenz
http://de.wikipedia.org/wiki/Gaußsche_Wochentagsformel
Eine andere Methode ist die Umwandlung des Kalenderdatums (Jahr, Monat, Tag) in ein Julianisches Datum
(auch Julianische Tagesnummer). Eine ohne Rest durch Sieben teilbare JDN ist immer ein Sonntag.
So kann man den Wochentag ganz einfach per Modulo-Division berechnen:
day_of_the_week = (jdn % 7);
// 0 : sunday
// 1 : monday
// ...
// 6 : saturday
MffG
EisFuX