Я немного растерялся.Кажется, что в конце 2009 года мой код пропал без вести целую неделю, и я попробовал несколько разных вещей.
Моя базовая функция для получения даты начала и окончания недели ниже.Учитывая год, неделю и день недели, он дает вам дату.
function datefromweeknr($aYear, $aWeek, $aDay)
{
$Days=array('xx','ma','di','wo','do','vr','za','zo');
//xx = Current Sun, ma = Mon ..... zo = Sun of the next Week
$DayOfWeek=array_search($aDay,$Days); //get day of week (1=Monday)
$DayOfWeekRef = date("w", mktime (0,0,0,1,4,$aYear)); //get day of week of January 4 (always week 1)
if ($DayOfWeekRef==0){
$DayOfWeekRef=7;
}
$ResultDate=mktime(0,0,0,1,4,$aYear)+((($aWeek-1)*7+($DayOfWeek-$DayOfWeekRef))*86400);
return $ResultDate;
}
Казалось, что все работает отлично, пока я не понял, что пропускал неделю с 27 декабря 2009 года по 2 января 2010 года.*
echo '<table border="1">';
for($i = 1; $i < 53; $i++){
if($i < 10){
$w = '0'.$i.'1';
}
else{
$w = $i.'1';
}
echo '<tr><td>Week#'.$i.' </td><td> '.date("Y-m-d",datefromweeknr(2009,$i,"xx")).' </td><td> '.date("Y-m-d",datefromweeknr(2009, $i,"za")).'</td><td> Week = '.date("W: Y-m-d",strtotime("2009W$w")).' </td></tr>';
}
echo '</table>';
Кажется, 52-я неделя года заканчивается 2009-12-26, а 1-я неделя нового года начинается 2010-01-03.Я теряю целую неделю, нет, Буэно!
Кто-нибудь знает, что я делаю неправильно, или может указать мне на глупый способ указать номер недели и год, чтобы получить дату начала и окончанияэтой недели, не теряя при этом ни одного дня?