Поскольку у вас есть 2 средства выбора даты, одно на from
время, а другое to
, первое всегда будет меньше, чем второе. Следовательно, когда from
время больше to
времени, это означает, что пользователь выбрал to
со следующего дня. Если мы не добавим дату для расчета разницы, PHP примет текущую дату по умолчанию. Мы можем легко исправить это, добавив условие для сравнения времени и соответственно добавляя даты. Ниже обновленный код.
<?php
$fromtime = '09:30 PM';
$totime = '02:00 AM';
$now = new \DateTime();
$today = $now->format('Y-m-d'); // Store current date
$now->add(new DateInterval('P1D')); // Add one day to current date to get next date
$nextDay = $now->format('Y-m-d'); // Store next date
if($fromtime > $totime) // If from time is bigger than to time, it means to is a next day
{
$fromdatetime = "$today $fromtime";
$todatetime = "$nextDay $totime";
}
else
{
$fromdatetime = "$today $fromtime";
$todatetime = "$today $totime";
}
$datetime1 = new \DateTime($fromdatetime);
$datetime2 = new \DateTime($todatetime);
$interval = $datetime1->diff($datetime2);
echo $interval->format('%hh');
?>