LINUX.ORG.RU

История изменений

Исправление Bizun, (текущая версия) :

Кажется я разобрался. Тестил минут 20, вроде все работает, какие только комбинации не перепробовал.

if ($time_start < $prev_night_end) {
	$end = strtotime($prev_night_end);
	$str = strtotime($time_start);
	$res = (($end - $str) / 60) / 60;
	$night_hours += $res;
}

if ($time_end > $night_start && $time_end < $night_end) {
	$str = strtotime($night_start);
	$end = strtotime($time_end);
	$res = (($end - $str) / 60) / 60;
	$night_hours += $res;
}

if (($time_start <= $night_start) && ($time_end >= $night_end)) {
	$night_hours += 8;
}
Если можно как то проще сделать, пишите.

УПД: код только для того случая, когда «рабочее время» не может длиться дольше 24 часов. Если такое может быть, то нужно делать нечто похожее на то, что предложил товарищ-анон выше.

Исправление Bizun, :

Кажется я разобрался. Тестил минут 20, вроде все работает, какие только комбинации не перепробовал.

if ($time_start < $prev_night_end) {
	$end = strtotime($prev_night_end);
	$str = strtotime($time_start);
	$res = (($end - $str) / 60) / 60;
	$night_hours += $res;
}

if ($time_end > $night_start && $time_end < $night_end) {
	$str = strtotime($night_start);
	$end = strtotime($time_end);
	$res = (($end - $str) / 60) / 60;
	$night_hours += $res;
}

if (($time_start <= $night_start) && ($time_end >= $night_end)) {
	$night_hours += 8;
}
Если можно как то проще сделать, пишите.

Исходная версия Deleted, :

Кажется я разобрался. Тестил минут 20, вроде все работает, какие только комбинации не перепробовал.

if ($time_start < $prev_night_end) {
											$end = strtotime($prev_night_end);
											$str = strtotime($time_start);
											$res = (($end - $str) / 60) / 60;
											$night_hours += $res;
										}

										if ($time_end > $night_start && $time_end < $night_end) {
											$str = strtotime($night_start);
											$end = strtotime($time_end);
											$res = (($end - $str) / 60) / 60;
											$night_hours += $res;
										}

										if (($time_start <= $night_start) && ($time_end >= $night_end)) {
											$night_hours += 8;
										}
Если можно как то проще сделать, пишите.