# Kalenderwoche



## wachteldonk (7. November 2007)

Wie kann ich anhand der Kalenderwoche z.B. 20 und des Jahres z.B. 2007 den Montag der KW als Datum rausbekommen unc noch besser auch das Datum des Sonntags der KW?


----------



## con-f-use (7. November 2007)

Hier kommt es drauf an, welche Definition von Kalenderwoche du verwenden willst. Bei den Amerikanern ist das anders als nach ISO-Norm. Bei uns wird auf Kalendern die ISO-Norm verwendet, bei der eine Woche mit dem Montag beginnt und dem Sonntag ändert. Die erste Kalenderwoche eines Jahres ist nach ISO die Woche, in der Mindestens 4 Tage des neuen Jahres liegen.

Bei den Amerikanern beginnt eine Woche mit Sonntag und endet mit Samstag. Auch ihre Definiton der ersten Kalenderwoche weicht ab.

Welche Definition willst du verwenden?


----------



## wachteldonk (7. November 2007)

Hallo,

die Montag bis Sonntag Europa Lösung


----------



## con-f-use (7. November 2007)

Bin froh, dass du das gesagt hast, denn für diesen Fall habe ich früher schonmal eine Funktion geschrieben. Wenn du die aufmerksam liest, solltest du eigentlich von da aus dein Problem selbst lösen können. Die Funktion sagt dir zwar nicht, welches der Sonntag ist, aber welches der Montag ist und der Sonntag ist ja bekanntlich nur sechs Tage später...


```
/*********************************************************************************
* Diese Funktion Berechnet das Datum des Montags der [intWeek]-ten Kalenderwoche
*+des Jahres [intYear] und gibt es als Javascript Date()-Objekt zurück.
* Verwendet wird die DIN 1355 / ISO 8601 Kalenderwochen-Norm
* [intYear] muss nach 1990 sein, wegen Unzulänglichkeiten von Javascript. 
*
* coded by con-f-use@gmx.net - be fair and do not remove this line!
*********************************************************************************/
function calWeek(intWeek,intYear) {
// VORARBEIT    
    dat = new Date(intYear,0,1);    // Datum hier initalisiert auf der 1.1 des Jahres
    firstDay = dat.getDay();    // Wochentag für den 1.1. des Jahres
    if( firstDay == 0 ) firstDay = 7; // (1=Montag, 2=Diestag, ..., 7=Sonntag)

// EINGABEPRÜFUNG
    // Date-Objekt verhält sich nur gutartig für Jahre nach 1990
    // Ein jahr hat normalerweise 52 Kalenderwochen nach Definition
    // Ist der 1.1 des Jahres aber ein Donnerstag, hat es 53 Kalenderowchen
    // Negative Kalenderwochen machen keinen Sinn
    if( intYear < 1991 || intWeek<1 || intWeek>53 || (intWeek>52 && firstDay!=4) ) return false;

// BERECHNEN DES STARTDATUMS FÜR DIE ERSTE KALENDERWOCHE
    // Ist der 1.1 später als Donnerstag, startet die erste Kalenderwoche erst am folgenden Montag
    if( firstDay > 4 )
        dat.setTime( dat.getTime() + (8-firstDay) * 24*60*60*1000 );
    // Sonst startet die erste Kalenderwoche am Montag vor dem 1.1 bzw. am 1.1 wenn er ein Montag ist
    else
        dat.setTime( dat.getTime() + (1-firstDay) * 24*60*60*1000 );
    // Die [intWeek]-te Kalenderwoche ist sieben mal [intWeek] minus eins Tage später als die erste
    dat.setTime( dat.getTime() + (intWeek-1)* 7*24*60*60*1000 );

// RETURN DES DATUM-OBJEKTS
    return dat;
}
```


----------



## klausiko (31. August 2011)

In Zeile 30 sitzt ein ganz böser Fehler,der bestimmt vielen Suchern auf die Füsse fällt.
Es fehlt leider ein kleines "*".

Vielleicht wird der Artikel noch gelesen.Ansonsten prima.

Mit f.G.klausiko


----------



## con-f-use (31. August 2011)

Korrigiert. Danke - und wow, wenn man sich seine alten Verbrechen so anschaut...

Das ist mal Kommentarorgasmus!


----------



## hela (31. August 2011)

klausiko hat gesagt.:


> ... Ansonsten prima.


Hallo,

das Programm hat noch ein Handicap: Die Eingabeprüfung ist nicht komplett. Es werden die Schaltjahre, die 53 Wochen haben und an einem Mittwoch beginnen, nicht in der Rechnung berücksichtigt. Das betrifft z.B. die Jahre 1992 und auch 2020. Die richtige Regel für die Eingangsprüfung würde heißen:

"Ist der 1. Januar *ODER* der 31. Dezember des Jahres ein Donnerstag, dann hat es 53 Kalenderwochen."


----------



## klausiko (7. September 2011)

Hallo con-f-use!
hier ist noch mal klausiko.Ich habe ein echt ernsthaftes Problem.Eine Mysql Tabelle ist mit einer Access-Db ODBC verknüpft.Die Daten der Access Tabelle werden mittels Code in die Mysql Tabelle eingelesen.Auch ein Memo-Feld.Wenn ich diese Datensätze abfrage und in einem HTML-Form ausgebe klappt das auch sehr gut.
Bis auf die Daten(Text)aus dem ehemaligen Memofeld.Ich hab sie in einer $var, kann sie mit Echo in der Seite ausgeben,wenn ich sie aber mit JavaScript an eine function im Head übergebe kommt nichts mehr an.Für alle anderen Felder funktioniert das.Wer kann mir hier weiterhelfen?Noch etwas, wenn ich den gleichen Text von Hand in die Mysql-Tabelle eintrage oder über die HTML-Seite einspeichere gehts ebenfalls.MfG klausiko


----------

