Вычисление начала и конца недели, зная номер недели и год

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function getWeekDates($year, $week){
// Высокосный год или нет
$L = date("L", mktime(1,1,1,1,1, $year)); // единицы чтобы получить именно этот год
$months = array(31, 28+$L, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
// Номер недели * 7 дней
$total_days = ($week-1)*7; // -1 чтобы получить именно нужную неделю
$i = 0;
while($sum < $total_days){
$sum += $months[$i++];
}
// Всего дней в этих месяцах:
$sum -= $months[$i-1];
// Номер месяца
$month = $i;
// Один из дней в этой неделе
$day = $total_days - $sum;
// День недели этого дня
$day_of_week = date("w", mktime(0,0,0, $month, $day, $year));
// Если это воскресенье
if ($day_of_week==0) $day_of_week=7;
// Получаем начало недели
$day = $day - ($day_of_week - 1) ;
$dates = array();
$dates['start'] = date("Y-m-d", mktime(0,0,0, $month, $day, $year));
$dates['end'] = date("Y-m-d", mktime(1,1,1, $month, $day+6, $year));
return $dates;
}