Здравствуйте. Ни у кого не завалялся класс/функция по подсчёту количества ночных часов между datetimes? Интервал с 22:00 до 6:00
PHP:
$dates = [ [ ‘2023-09-01 07:32:04’, ‘2023-09-01 22:15:08’ ], [ ‘2023-09-03 07:40:44’, ‘2023-09-03 20:14:59’ ], [ ‘2023-09-04 21:11:13’, ‘2023-09-05 05:31:49’ ], [ ‘2023-09-16 07:38:34’, ‘2023-09-16 23:10:31’ ], [ ‘2023-09-19 15:00:00’, ‘2023-09-20 02:00:00’ ], [ ‘2023-09-22 22:00:00’, ‘2023-09-23 06:00:00’ ] ];Спасибо.
Сами, то пробовали решить?
Добрый день!
Попробуйте это:PHP:
<?php $dates = [ [ ‘2023-09-01 07:32:04’, ‘2023-09-01 22:15:08’ ], [ ‘2023-09-03 07:40:44’, ‘2023-09-03 20:14:59’ ], [ ‘2023-09-04 21:11:13’, ‘2023-09-05 05:31:49’ ], [ ‘2023-09-16 07:38:34’, ‘2023-09-16 23:10:31’ ], [ ‘2023-09-19 15:00:00’, ‘2023-09-20 02:00:00’ ], [ ‘2023-09-22 22:00:00’, ‘2023-09-23 06:00:00’ ] , [ ‘2023-09-22 22:00:00’, ‘2023-09-23 08:00:00’ ] ]; class nightTimeFromDates{ private $nightTimeBegin; private $nightTimeEnd; function __construct($nightTimeBegin=«22:00:00», $nightTimeEnd=«06:00:00») { $this -> nightTimeBegin = $nightTimeBegin; $this -> nightTimeEnd = $nightTimeEnd; } private function getCheckDate($FromDate, $nightTime){ } private function CheckNexDay($date){ return $dateEnd -> diff($dateBegin)->d; } public function getNightTime($date){ $dateBegin = new DateTime($date[0]); $dateEnd = new DateTime($date[1]); $timeBegin = $dateBegin -> getTimestamp(); $timeEnd = $dateEnd -> getTimestamp(); $nightTimeBegin = $this -> nightTimeBegin; $nightTimeEnd = $this -> nightTimeEnd; $checkDateBegin = $this -> getCheckDate($date[0], $nightTimeBegin); $checkTimeBegin = $checkDateBegin -> getTimestamp(); $checkDateEnd = $this -> getCheckDate($date[1], $nightTimeEnd); $checkTimeEnd = $checkDateEnd -> getTimestamp(); if($timeEnd >= $checkTimeBegin) { if($timeEnd > $checkTimeEnd AND $this->CheckNexDay($date)) $dateEnd = $checkDateEnd; $nightTime = $checkDateBegin -> diff($dateEnd); return [ $nightTime->h, $nightTime->i, $nightTime->s ]; } else return false; } } $nightTimeBegin = «22:00:00»; $nightTimeEnd = «06:00:00»; $nightNightTime = new nightTimeFromDates($nightTimeBegin, $nightTimeEnd); /* OR $nightNightTime = new nightTimeFromDates(); default: $nightTimeBegin = «22:00:00»; $nightTimeEnd = «06:00:00»; */ foreach($dates as $date) { echo «<hr>»,$date[0],» «,$date[1], «<br>»; $nightTime = $nightNightTime -> getNightTime($date); if($nightTime) { echo $nightTime[0].‘ hours<br>’; echo $nightTime[1].‘ minutes<br>’; echo $nightTime[2].‘ seconds’; } else echo «Not night time<br>»; } /* test: 2023-09-01 07:32:04 2023-09-01 22:15:08 0 hours 15 minutes 8 seconds 2023-09-03 07:40:44 2023-09-03 20:14:59 Not night time 2023-09-04 21:11:13 2023-09-05 05:31:49 7 hours 31 minutes 49 seconds 2023-09-16 07:38:34 2023-09-16 23:10:31 1 hours 10 minutes 31 seconds 2023-09-19 15:00:00 2023-09-20 02:00:00 4 hours 0 minutes 0 seconds 2023-09-22 22:00:00 2023-09-23 06:00:00 8 hours 0 minutes 0 seconds 2023-09-22 22:00:00 2023-09-23 08:00:00 8 hours 0 minutes 0 seconds */ ?>Удачи!
Похожие записи:
- Почему aiohttp web сервер перестает отвечать на запросы?
- Любая идея, почему домен, размещенный в Azure, приведет к тому, что Windows DNS (кэширующий преобразователь) не сможет выполнить поиск?
- Вычислить разницу во времени в цикле
- Использование класса данных при парсинге с помощью запросов
- Добавить 10000 дней к дате
