User Tools

Site Tools


php:kompost:workingtimesinperiod

[PHP] Arbeitszeitperiode erstellen

Pol fragte im Tutorialsforum nach, wie man die Arbeitszeiten über eine Periode bestimmen kann. Dies war meine Lösung

//Anfangszeit: 01.02.2013 08:30
//Endzeit: 28.02.2013 17:30
 
define('C_DATETIME_FORMAT', 'd.m.Y H:i');
define('C_DATE_FORMAT','d.m.Y');
define('C_TIME_FORMAT', 'H:i');
 
$start = DateTime::createFromFormat(C_DATETIME_FORMAT, '01.02.2013 08:30');
$end = DateTime::createFromFormat(C_DATETIME_FORMAT, '28.02.2013 17:30');
 
//Trenne Zeit und Datum
$startDate = DateTime::createFromFormat(C_DATE_FORMAT, $start->format(C_DATE_FORMAT));
$startTime = DateTime::createFromFormat(C_TIME_FORMAT, $start->format(C_TIME_FORMAT));
 
$endDate = DateTime::createFromFormat(C_DATE_FORMAT, $end->format(C_DATE_FORMAT));
$endTime = DateTime::createFromFormat(C_TIME_FORMAT, $end->format(C_TIME_FORMAT));
 
//Interval defineren +1Tag
$interval = new DateInterval('P1D');
//Die Periode erstellen 
$period = new DatePeriod($startDate, $interval, $endDate);
 
//Die ganez Periode durchgehen
$dateStrings = array();
foreach($period as $date){
	//Prüfen ons ein Arbeitstag ist
	if($date->format('N') < 6){
		//Tagesanfang defineren
		$dayStart = clone $date->setTime($startTime->format('H'), $startTime->format('i'));
		//Tagesende definieren
		$dayEnd = clone $date->setTime($endTime->format('H'), $endTime->format('i'));
		//TODO: mach mit den Informationen was du willst
		$dateStrings[] = sprintf('%s: %s - %s', $date->format('l'), $dayStart->format(C_DATETIME_FORMAT), $dayEnd->format(C_TIME_FORMAT)); 
	}else{
		//TODO: Weekend
	}
}
echo implode('<br />', $dateStrings);

Das ergibt die folgende Ausgabe

Friday: 01.02.2013 08:30 - 17:30
Monday: 04.02.2013 08:30 - 17:30
Tuesday: 05.02.2013 08:30 - 17:30
Wednesday: 06.02.2013 08:30 - 17:30
Thursday: 07.02.2013 08:30 - 17:30
Friday: 08.02.2013 08:30 - 17:30
Monday: 11.02.2013 08:30 - 17:30
Tuesday: 12.02.2013 08:30 - 17:30
Wednesday: 13.02.2013 08:30 - 17:30
Thursday: 14.02.2013 08:30 - 17:30
Friday: 15.02.2013 08:30 - 17:30
Monday: 18.02.2013 08:30 - 17:30
Tuesday: 19.02.2013 08:30 - 17:30
Wednesday: 20.02.2013 08:30 - 17:30
Thursday: 21.02.2013 08:30 - 17:30
Friday: 22.02.2013 08:30 - 17:30
Monday: 25.02.2013 08:30 - 17:30
Tuesday: 26.02.2013 08:30 - 17:30
Wednesday: 27.02.2013 08:30 - 17:30
php/kompost/workingtimesinperiod.txt · Last modified: 11.12.2013 14:24:40 (external edit)