Codice PHP:
<?php
/*
* Trova il $day_of_week della $week(esima) settimana a partire dalla data $start
* Il risultato può essere anche minore di start $start
*/
function find_day_of_week($start, $week, $day_of_week = 0) {
$wstart = date('w', $start);
$offset = $day_of_week - $wstart;
$result = mktime(0,0,0, 1, 1 + $offset + ($week - 1) * 7);
return $result;
}
/*
* Trova il $day_of_week della $week(esima) settimana del mese $month/$year
*/
function find_day_of_month_week($week, $month, $year, $day_of_week = 0) {
$start = mktime(0, 0, 0, $month, 1, $year);
$wstart = date('w', $start);
$week = ($day_of_week < $wstart) ? $week + 1 : $week;
return find_day_of_week($start, $week, $day_of_week);
}
/*
* Trova il $day_of_week della $week(esima) settimana dell'anno $year
* Non tiene conto del cambio di anno se si tratta dei primi giorni di gennaio
*/
function find_day_of_year_week($week, $year, $day_of_week = 0) {
$start = mktime(0, 0, 0, 1, 1, $year);
return find_day_of_week($start, $week, $day_of_week);
}
/*
* Trova il $day(esimo) $day_of_week della settimana nell'anno $year
* Tiene conto anche del cambio di anno se si tratta dei primi giorni di gennaio
* Ad esempio, il 13^ martedi del 2008:
* $day = find_first_day_of_week(13, 2008, 2);
*/
function find_first_day_of_week($day, $year, $day_of_week = 0) {
$start = mktime(0, 0, 0, 1, 1, $year);
$wstart = date('w', $start);
$day = ($day_of_week < $wstart) ? $day + 1 : $day;
return find_day_of_year_week($day, $year, $day_of_week);
}
print('<pre>');
print('Il 3 Martedi(2) di Ottobre 2008: ');
$date = find_day_of_month_week(3, 10, 2008, 2);
print(date('d m Y - l', $date));
print("\r\n");
print('Il primo(1) lunedi(1) del 2008: ');
$date = find_first_day_of_week(1, 2008, 1);
print(date('d m Y - l', $date));
print("\r\n");
print('Il primo(1) martedi(2) del 2008: ');
$date = find_first_day_of_week(1, 2008, 2);
print(date('d m Y - l', $date));
print("\r\n");
print('</pre>');
?>