Как рассчитать прошедшее время в определенных диапазонах?
У меня есть приложение Laravel, которое по сути обеспечивает бэкэнд для игры. Эта игра охватывает несколько дней, но только определенные часы в течение каждого дня. В идеале, я бы хотел, чтобы экран отображал "прошедшее время", но я хочу, чтобы этот дисплей учитывал только время в игре, а не время с начала игры.
Например: эта игра будет работать с понедельника по пятницу с 8:00 до 15:00. Представьте себе, что игра начинается в понедельник в 8:00, если бы это был четверг в 10:00, я бы хотел, чтобы на прошедшем времени показывалось 23:00:00.
Как мне хранить эти диапазоны дат? Не существует верхнего предела количества дней, поэтому я не могу хранить их в многомерном массиве. Как бы вы подошли к этому?
1 ответ
function get_hours_elapsed($day, $hour) {
$time_start = 8; // 8am;
$time_end = 15; // 3pm
$day_start = 1; // Mon
$day_end = 5; // Fri
$days_elapsed = max(min($day, $day_end) - $day_start, 0);
$hours_elapsed = $days_elapsed * ($time_end - $time_start);
$hours_elapsed += max(min($hour, $time_end) - $time_start, 0);
return $hours_elapsed;
}
var_dump(get_hours_elapsed(
date("N"), // 0 - 6, 0 being Sunday
date("G") // 0 - 23
)); // actual time
var_dump(get_hours_elapsed(4, 10)); // 10 am on a Thursday
Так как для меня среда 5 вечера, она печатает:
int(21);
int(23);
Если время идет несколько недель, просто добавьте num_weeks * total_hours_in_week
ч.
Если таймер не запускается в понедельник 8 утра, вычтите количество часов. Так что, если это начинается в 10:00 в четверг, вычтите 23.