User Tools

Site Tools


php:functions:date:findweekdays

[PHP] findWeekDays

Eine einfache kleine Funktion um alle Tage ienes bestimmten Wochentages eines Monats zu ermitteln. 'Gib mir alle Freitage im August 2012'

ab PHP5.3

Code

findWeekdays.php
/**
 * @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);
}

Anwendungsbeispiel

$period = findWeekdays('fri', 9, 2012);
foreach($period as $date){
	echo $date->format("l d.m.Y\n");
}

bis PHP5.2

Code

findWeekdays.php
<?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;
}
?>

Anwendungsbeispiel

<?
$dates = findWeekdays('fri', 9, 2012);
foreach ($dates as $date) {
  echo date('l, d.m.Y', $date) . '<br>';
}
?>

Ausgabe beider Versionen

Friday, 07.09.2012
Friday, 14.09.2012
Friday, 21.09.2012
Friday, 28.09.2012
php/functions/date/findweekdays.txt · Last modified: 09.12.2013 09:39:54 (external edit)