======[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