Hi Pascal,
Post by Pascal Rehfeldtich habe eine Kalenderwoche und das Jahr in der sich diese KW befindet
(z.B. 1 2004)
Ich hatte das Problem auch gerade lösen müssen. Du rechnest
mit date('W') aus, welcher Tag der 1.1. deines $jahr (=2004)
ist. Ist er kleiner-gleich Donnerstag, rechnest du auf den
Montag zurück (d.h. vom Timestamp des 1.1. 3*86400 abziehen
bzw. mit mktime einfach 1-($wochentag-1) Tage abziehen), ansonsten auf
den Montag vor, mit mktime 1+(7-$wochentag+1).
Dann weißt du den Montag der ersten Kalenderwoche und kannst
auf diesen Timestamp nochmal ($kw-1)*7 Tage drauf rechnen, um
auf den Montag der gewünschten $kw in $jahr zu kommen.
Bei mir sah das Rumgehacke dann so aus:
function firstkw($jahr) {
$erster = mktime(0,0,0,1,1,$jahr);
$wtag = date('w',$erster);
#print "wtag = $wtag<hr>";
if ($wtag <= 4) {
/**
* Donnerstag oder kleiner: auf den Montag zurückrechnen.
*/
$montag = mktime(0,0,0,1,1-($wtag-1),$jahr);
} else {
/**
* auf den Montag nach vorne rechnen.
*/
$montag = mktime(0,0,0,1,1+(7-$wtag+1),$jahr);
}
return $montag;
}
function mondaykw($kw,$jahr) {
$firstmonday = firstkw($jahr);
$mon_monat = date('m',$firstmonday);
$mon_jahr = date('Y',$firstmonday);
$mon_tage = date('d',$firstmonday);
$tage = ($kw-1)*7;
$mondaykw = mktime(0,0,0,$mon_monat,$mon_tage+$tage,$mon_jahr);
return $mondaykw;
}
function weekofkw($kw,$jahr) {
$mon = mondaykw($kw,$jahr);
$monat = date('m',$mon);
$jahr = date('Y',$mon);
$tag = date('d',$mon);
return array(
$mon,
mktime(0,0,0,$monat,$tag+1,$jahr),
mktime(0,0,0,$monat,$tag+2,$jahr),
mktime(0,0,0,$monat,$tag+3,$jahr),
mktime(0,0,0,$monat,$tag+4,$jahr),
mktime(0,0,0,$monat,$tag+5,$jahr)
);
}