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

Php 如何找出下午时间和上午时间之间的时差?,php,datetime,php-carbon,Php,Datetime,Php Carbon,在我的表单中,有两个时间选择器,用户可以随时选择一个时间。它没有与之关联的日期。为了生成报告,我必须计算它们之间的时间差。如果“从”和“到”时间是“06:00到10:00”,那么它非常适合,但是如果“从”和“到”时间是“21:00到02:00”,我会得到19小时的时差。你能帮我修一下吗 对于这种情况,“21:00至02:00”,时差应为5小时 这是密码 $datetime1 = new \DateTime('09:30 PM'); $datetime2 = new \DateTime('02:0

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

由于您有两个日期选择器,一个用于
时间,另一个用于
时间,因此前者总是比后者小。因此,当
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

这是因为PHP默认采用今天的日期,即2020-04-01。因此,它在内部显示了
2020-04-01 21:30:00
2020-04-01 02:00:00
之间的差异,这在逻辑上是正确的。这里有一个问题,您的
datetime2
是否总是大于
datetime1
?@Samir并不总是这样。这取决于你的问题是否经常被注意到。所以从技术上讲,
from
时间总是小于
to
时间。我的意思是,如果用户选择从下午5点到晚上8点,这意味着计时是从同一天开始的。但如果用户选择从晚上9点30分到凌晨2点,则表示计时时间是从两个不同的日期开始的,即2020-04-01 21.30:00和2020-04-02 02:00:00。如果是这样,那么就有一个解决方案。请确认。是的,您认为我们可以如何解决这个问题?比较时间可以解决问题。检查我的答案。