Axel Richter: Aus KalenderWoche Monat ermitteln

Beitrag lesen

Hallo,

Also ich definiere über eine DropDownBox meine KWs.
Wenn ich 4 auswähle soll Januar erscheinen bei 5 ebenfalls auch wenn die Woche schon zur Hälfte im Februar liegt.

Nur, wenn sie zur Hälfte im nächsten Monat liegt? Was ist mit
KW: 9 von: Montag, 27. Februar 2006 bis: Sonntag, 05. März 2006?

Naja, egal. Das musst Du dann selbst entscheiden. Die Sache ist allerdings nicht so trivial, wie sie sich anhört.

  
<?php  
setlocale(LC_TIME, "de_DE", "german");  
  
/*Nachfolgende Funktion ermittelt aus Jahr und KW die timestamps von Beginn  
  und Ende dieser KW und gibt diese Werte in einem Array zurück.*/  
function get_begin_end_from_KW($year, $KW) {  
 $first_day = mktime(0, 0, 0, 1, 1, $year);  
 /*Ausschaggebend fuer die erste KW nach DIN EN 28601 ist, ob der 04.01. innerhalb  
   dieser Woche liegt. Die Funktion date('W', ...) beruecksichtigt das. Mit ihr  
   lässt sich also die erste KW ermitteln. Der KW-Wechseltag ist demzufolge Donnerstag  
   (4 Tage vor der nächsten Woche).  
   [link:http://www.salesianer.de/util/kalfaq.html#B3]*/  
 $thursday_of_first_KW = (date('W', $first_day) == 1)?strtotime('this thursday', $first_day):strtotime('next thursday', $first_day);  
 $thursday_of_requested_KW = strtotime('+'.($KW-1).' weeks', $thursday_of_first_KW);  
 $begin_of_requested_KW = strtotime('last monday', $thursday_of_requested_KW);  
 $end_of_requested_KW = strtotime('this sunday', $thursday_of_requested_KW);  
 return array($begin_of_requested_KW, $end_of_requested_KW);  
}  
  
$year = 2006;  
  
/*Es gibt Jahre (1992, 1998, 2004, 2009, 2015), die 53 Wochen haben.  
  [link:http://www.salesianer.de/util/kalfaq.html#B3]*/  
for ($KW = 1; $KW < 54; $KW++) {  
 list ($begin_of_requested_KW, $end_of_requested_KW) = get_begin_end_from_KW($year, $KW);  
 //Die 53. Woche muss nicht ausgegeben werden, wenn sie im aktuellen Jahr nicht vorhanden ist.  
 if(date('W', $begin_of_requested_KW) == $KW) {  
  echo 'Jahr: '.$year.', angeforderte KW: '.$KW.' von: '.strftime('%A, %d. %B %Y', $begin_of_requested_KW).' bis: '.strftime('%A, %d. %B %Y', $end_of_requested_KW).'<br>';  
 }  
}  
?>  

Ich habe versucht das Ganze zu kommentieren. Bei Fragen, kannst Du ja hier noch mal posten.

viele Grüße

Axel