#php #datetime #period
#php #datetime #точка
Вопрос:
Мне нужно найти 15-минутные интервалы между двумя временами без даты, все работает нормально, если оба времени до 00:00. Я пропускаю такие времена, как: 17:00
, 23:00
и 01:30
.
Проблема, конечно, в том, что после полуночи наступает другой день, так что именно по этой причине он терпит неудачу. Я хотел знать, есть ли способ найти интервалы независимо потому что время окончания может быть любым, например. до или после полуночи, поэтому добавление реальной даты может быть не идеальным, это будет всего через несколько часов после полуночи, не более того.
$period = new DatePeriod(
new DateTime("17:00"),
new DateInterval('PT15M'),
new DateTime("01:00")
);
Ничего не возвращает, любая помощь была бы очень признательна.
Ответ №1:
Если время окончания короче времени начала, я не вижу другого варианта, кроме добавления 1 дня к времени окончания.
$start = "17:00";
$end = "01:30";
$dtStart = date_create('today '.$start);
$dtEnd = date_create('today '.$end);
if($dtEnd < $dtStart){
$dtEnd->modify(' 1 day');
}
$period = new DatePeriod(
$dtStart,
new DateInterval('PT15M'),
$dtEnd
);
Ответ №2:
Поскольку вы используете только часть времени, день будет автоматически установлен на текущий день.. что делает конец меньше начала.
Но если вы возьмете реальные даты (какие из них на самом деле не имеют значения) и выберете следующий день в 1 час…
$period = new DatePeriod(
new DateTime("1970-01-01 17:00"),
new DateInterval('PT15M'),
new DateTime("1970-01-02 01:00")
);
foreach ($period as $date) {
echo $date->format("H:i").' - ';
}
hth
Комментарии:
1. Да, это помогает, хотя и выявляет недостаток в моем вопросе. Я обновил, чтобы отразить это. Время окончания является динамическим, поэтому оно может быть до или после полуночи, в этом случае дату необходимо будет изменить. Я принимаю это без даты, у меня не так много вариантов?
2. Используйте реальные даты, и у вас возникнет проблема … или вам придется сделать предположение: если начало больше конца, то время окончания на следующий день