如何找到下午时间和上午时间之间的时差?

How to find the Time Difference between a PM time and AM time?

在我的表单中有 2 个时间选择器,用户可以在其中不时 select。它没有与之关联的日期。为了生成报告,我必须计算它们之间的时差。如果从和到时间是“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');

?>

如果$totime 小于$fromtime,差值变为负数。 DateInterval->invert == 1 表示。这与这个简短的解决方案一起使用来更正结果。

$fromtime = '09:30 PM';
$totime = '02:00 AM';

$diff = date_create($fromtime)->diff(date_create($totime));
$hours = $diff->invert ? 24-$diff->h : $diff->h;

echo $hours;  //5