Я работаю над приложением справочной службы. Пользователи создают билеты, а я пытаюсь понять, как кодировать время.
Скажем, у меня есть массив рабочих часов, который выглядит так:
$bh['Monday']['start_time'] = "8:00am"$bh['Monday']['end_time'] = "5:00pm"$bh['Tuesday']['start_time'] = "8:00am"$bh['Tuesday']['end_time'] = "5:00pm"$bh['Wednesday']['start_time'] = "8:00am"$bh['Wednesday']['end_time'] = "5:00pm"$bh['Thursday']['start_time'] = "8:00am"$bh['Thursday']['end_time'] = "5:00pm"$bh['Friday']['start_time'] = "8:00am"$bh['Friday']['end_time'] = "5:00pm"
И массив с праздниками:
$holidays = array("Dec 25th","Nov 24th")
У меня также есть две другие переменные:
$resolve_within = "5";
$resolve_within_duration = "days";
Что у меня так далеко:
$resolve_within = "5";
$resolve_within_duration = "days";
$holidays = array("Dec 25th","Nov 24th")
$bh['Monday']['start_time'] = "8:00am"$bh['Monday']['end_time'] = "5:00pm"$bh['Tuesday']['start_time'] = "8:00am"$bh['Tuesday']['end_time'] = "5:00pm"$bh['Wednesday']['start_time'] = "8:00am"$bh['Wednesday']['end_time'] = "5:00pm"$bh['Thursday']['start_time'] = "8:00am"$bh['Thursday']['end_time'] = "5:00pm"$bh['Friday']['start_time'] = "5:00pm"$bh['Friday']['end_time'] = "5:00pm"
$start = new DateTime('now'); //when the ticket is created
$end = new DateTime('now');
$end->modify('+'.$resolve_within.' '.$resolve_within_duration); //this is essentially the due by time, adding 5 days to 'now'$interval = $end->diff($start);
// total days
$days = $interval->days;
// create an iterateable period of date (P1D equates to 1 day)
$period = new DatePeriod($start, new DateInterval('P1D'), $end);
foreach($period as $dt) {
$curr = $dt->format('D');
//adjust days for holidays
if (in_array($dt->format('M jS'), $holidays)) {
$days--;
}
}
echo "Ticket is due in $days days.";
Итак, учитывая дату начала и дату окончания, как я могу определить срок выполнения, исключая даты в $holidays
массив, а также принимая во внимание время и дни в $bh
(рабочее время) массив?
Например, если кто-то создает билет в среду, 23.08.16, в 15:00, а в пятницу выходной. Срок должен быть четверг 8/11/16 в 3 часа дня. Помните также, что продолжительность может быть часами, а не днями.
Например, некоторые тикеты могут быть помечены как срочные, поэтому значение $ resol_within может быть «4», а $ resol_within_duration будет «часы»
Задача ещё не решена.
Других решений пока нет …