======[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('
', $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