在我的表单中,有2个时间选择器,用户可以不时选择一个时间。没有与之关联的日期。为了生成报告,我必须计算它们之间的时间差。如果“开始时间”和“结束时间”为“ 06:00到10:00”,则非常适用,但是如果“开始时间”和“结束时间”为“ 21:00到02:00”,则时差为19小时。您能帮我解决这个问题吗?
在这种情况下,“ 21:00到02:00”的时差应为5小时。
这是代码
$datetime1 = new \DateTime('09:30 PM');
$datetime2 = new \DateTime('02:00 AM');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%hh');
exit;
由于您有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');
?>