Eine einfache kleine Funktion um alle Tage ienes bestimmten Wochentages eines Monats zu ermitteln. 'Gib mir alle Freitage im August 2012'
/** * @param <String> Wochentag Analog date('D') * @param <Integer> Monat * @param <Integer> Jahr * @return <DatePeriod> */ function findWeekdays($weekday, $month, $year) { $dateFrom = clone $dateTo = DateTime::createFromFormat('d.n.Y', "1.{$month}.{$year}"); $dateFrom->modify('first day of +0 month'); $dateTo->modify('last day of +0 month'); $interval = DateInterval::createFromDateString("next {$weekday}"); return new DatePeriod($dateFrom, $interval, $dateTo, DatePeriod::EXCLUDE_START_DATE); }
$period = findWeekdays('fri', 9, 2012); foreach($period as $date){ echo $date->format("l d.m.Y\n"); }
<?php /** * Sucht bestimmte Wochentage eines Monats aus * @param variant weekday * @param int month * @param int year * @return Array<TimeStamp> */ function findWeekdays($weekday, $month, $year) { $date = strtotime("next {$weekday}", mktime(0, 0, 0, $month, 1, $year)); while(date('n', $date) == $month){ $dates[] = $date; $date = strtotime("next {$weekday}", $date); } return $dates; } ?>
<? $dates = findWeekdays('fri', 9, 2012); foreach ($dates as $date) { echo date('l, d.m.Y', $date) . '<br>'; } ?>
Friday, 07.09.2012 Friday, 14.09.2012 Friday, 21.09.2012 Friday, 28.09.2012