Ich war im Netz auf der Suche nach der Funktionalität „letzter Samstag im Monat“. Das folgende Script/Funktion konnte mein Anliegen lösen.
/**
* @param string $initial Timestamp des Ausgangsdatums
* @param string $select Startdatum im Format "first saturday" bzw "last sunday",
* mögliche Optionen sind "first, second, third, fourth, fifth, last"
* @return array|mixed Timestamp des gewünschten Datums
*/
function calculateWeekdays($initial = '', $select = '') {
if(empty($select))$select = array();
if(empty($initial)) $initial = time();
$target = array('first' => 0,
'second'=> 1,
'third' => 2,
'fourth'=> 3,
'fifth' => 4,
'last' => 5);
$s2long = array('sunday' => 'sun',
'monday' => 'mon',
'tuesday' => 'tue',
'wednesday' => 'wed',
'thursday' => 'thu',
'friday' => 'fri',
'saturday' => 'sat');
$pattern = array('0' => 'sun',
'1' => 'mon',
'2' => 'tue',
'3' => 'wed',
'4' => 'thu',
'5' => 'fri',
'6' => 'sat');
$weekdays = array();
for($i=1;$i<=date('t', $initial);$i++) {
$temp = date('Y', $initial).'-'.date('m', $initial).'-'.$i;
$date = strtotime($temp);
for($d=0;$d<7;$d++) {
if(date('w', $date) == $d) {
$weekdays[$pattern[$d]][] = $date;
}
}
}
$select = explode(' ', $select);
if(count($select)<2) return array();
$key = $s2long[strtolower($select[1])];
$key2 = $target[$select[0]];
$return = ($key2 == 5) ? end($weekdays[$key]):$weekdays[$key][$key2];
if(empty($select)) return $weekdays;
return $return;
}
Source: Berechnen von Wochentagen