БрифинГ:Расчет рабочих дней с PHP: Это точно?
Я пытаюсь вычислим рабочих дней между двумя датами для системы управления пользовательского проекта, я в здании. Вот что я сделал до сих пор, как показано ниже. Кажется, он работает нормально, но я не уверен, насколько он точен и должен ли я использовать его или нет. Любая обратная связь будет высоко оценена!
КОД
<?php
# date variables:
date_default_timezone_set('Asia/Kuwait');
$date['start'] = date('Y-m-d H:i:s');
$date['end'] = '2013-12-01 08:00:00';
$date['off'] = array('Friday','Saturday'); # usual days off in Kuwait)
# calculate the difference:
$date_s = new DateTime($date['start']);
$date_e = new DateTime($date['end']);
$interval = $date_s->diff($date_e);
# obtain relevant values:
$remaining_days = $interval->format('%r%a');
$remaining_weeks = floor($remaining_days/7);
$weekend_days = ($remaining_weeks*count($date['off']));
# additional holidays (just an example):
$extra_holidays_array = array
(
'holiday 1' => '2013-06-24 00:00:00',
'holiday 2' => '2013-06-25 00:00:00',
'holiday 3' => '2013-07-01 00:00:00',
'holiday 4' => '2013-08-24 00:00:00'
);
# check if a real holiday:
$extra_holidays = 0;
foreach($extra_holidays_array as $check_date)
{
$day_of_holiday = date('l', strtotime($check_date));
if(! in_array($day_of_holiday,$date['off'])){ $extra_holidays++; }
}
# total holidays:
$total_holidays = ($weekend_days+$extra_holidays);
# business days:
$business_days_nh = ($remaining_days-$weekend_days); # NO extra holidays
$business_days_wh = ($remaining_days-$weekend_days-$extra_holidays); # WITH extra holidays
?>
<ul>
<li>Current Date: <?php echo $date['start']; ?></li>
<li>Deadline Date: <?php echo $date['end']; ?></li>
</ul>
<ul>
<li>Remaining Days: <?php echo $remaining_days; ?></li>
<li>Remaining Weeks: <?php echo $remaining_weeks; ?></li>
</ul>
<ul>
<li>Usual Holidays: <?php echo $weekend_days; ?></li>
<li>Extra Holidays: <?php echo $extra_holidays; ?></li>
<li>Total Holidays: <?php echo $total_holidays; ?></li>
</ul>
<ul>
<li>Business Days (Before Holidays): <?php echo $business_days_nh; ?></li>
<li>Business Days (After Holidays): <?php echo $business_days_wh; ?></li>
</ul>
У вас есть комплект модульных тестов, охватывающих крайние случаи? –
Извините, я не понимаю. Что ты конкретно имеешь ввиду? Если то, что я предполагаю, правильно, то если дата начала равна или больше даты окончания, я получаю отрицательные значения, которые не являются проблемой для меня. –
Я имею в виду, что многие разработчики также записывают модульные тесты, чтобы идти с их кодом, тесты, которые они могут запустить, чтобы доказать, что код работает правильно. Таким образом, им не нужно спрашивать других людей, если это работает, но может доказать, что оно работает, если все тесты проходят –