ersten/zweiten/letzten Samstag im Monat berechnen

Nils Hitze

Admin a.D.
Hi Folks, ich wollte mal schnell fragen ob hier schonmal jemand mit
Daten rechnen musste und sowas wie den xten Wochentag im Monat
y ausrechnen kann. Habe bisher noch nichts zu dem Thema gefunden.
 
$initial ist der timestamp des startdatums
wenn kein Initialdatum angegeben wird, geht die Funktion vom aktuellen Monat aus
und gibt für den Monat alle Daten als Array mit Timestamps zurück, geordnet nach
Wochentagen.

$select ist, wenn gewünscht, das startdatum im Format "first saturday" bzw "last sunday"
mögliche optionen sind "first, second, third, fourth, fith, last"

Beispiel:
echo calculateWeekdays(strtotime('2006-01-01', 'first sunday');
gibt "01.01.2006" zurück, da der erste erste auf einen Sonntag fiel.

Tut euch keinen Zwang an wenn ihr Fragen oder Änderungswünsche habt.
PHP:
	function calculateWeekdays($initial = '', $select = '') {
		if(empty($select))$select   = array();
		if(empty($initial)) $initial	= time();
		
		$target		= array('first'	=> 0,
							'second'=> 1,
							'third'	=> 2,
							'fourth'=> 3,
							'fith'	=> 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');

		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;
	}
 
Zurück