获得两个给定时间之间的时间差

时间:2016-04-21 03:09:02

标签: php laravel laravel-5

我试图在两个给定时间之间获得时间差异,例如第一次' 00:01'然后第二次' 47:25'这是我到目前为止所做的,

$start_time = "17:00:01";
$end_time = "17:47:25";

echo $start_time->diff($end_time);

但遗憾的是,似乎没有工作,有任何帮助,想法吗?

我的预期输出必须是,如果没有小时差异,但在分钟和秒钟之间存在差异," 22分钟和15秒",如果没有分钟差异但是有差别几个小时," 2小时和10秒"但如果只差几秒钟,那么,#34; 22秒"。

6 个答案:

答案 0 :(得分:2)

php中的字符串不是对象,因此无法在其上调用diff方法。

使用diff方法,您必须将字符串更改为DateTime对象。

如果您想在同一天比较时差,可以尝试:

$start_time = "17:00:01";
$end_time = "17:47:25";

$start_datetime = new DateTime(date('Y-m-d').' '.$start_time);
$end_datetime = new DateTime(date('Y-m-d').' '.$end_time);

var_dump($start_datetime->diff($end_datetime));

答案 1 :(得分:2)

就是这样。

<强> PHP

$start_time = "17:00:01";
$end_time = "17:47:25";

$time1 = new DateTime($start_time);
$time2 = new DateTime($end_time);
$interval = $time1->diff($time2);

echo $hour = $interval->format('%h hour');
echo $min = $interval->format('%i min');
echo $sec = $interval->format('%s second');

<强>输出:

0 hour 47 min 24 sec

现在你可以添加一些条件并制作真实的格式。

答案 2 :(得分:1)

使用字符串函数的另一种方法:

/*
 * Get difference in seconds between time formats
 */
function getDiff($start_time, $end_time)
{
    $start_time = timeFormatToSeconds($start_time);
    $end_time = timeFormatToSeconds($end_time);

    if ($end_time > $start_time) {
        return $end_time - $start_time;
    }

    return false;
}

/*
 * Convert time format (HH:MM:SS) to seconds
 */
function timeFormatToSeconds($time_format)
{
    sscanf($time_format, "%d:%d:%d", $hours, $minutes, $seconds);

    return $hours * 3600 + $minutes * 60 + $seconds;
}

$start_time = "17:00:01";
$end_time = "17:47:25";

$diff = getDiff($start_time, $end_time);

if ($diff) {
    $hours = floor($time / (60 * 60));
    $time -= $hours * (60 * 60);

    $minutes = floor($time / 60);
    $time -= $minutes * 60;

    $seconds = floor($time);
    $time -= $seconds;

    var_dump(array($hours, $minutes, $seconds));
}

答案 3 :(得分:1)

将字符串时间转换为时间戳并减去。将时间戳转换为所需的时间格式。

$start_time = strtotime('17:00:01');
$end_time = strtotime('17:47:25');
$diff = $end_time - $start_time;
echo date('H:i:s', $diff);

答案 4 :(得分:1)

两次相差

 public function convTimeToMinutes($intime, $outtime)
    {
            $start = Carbon::parse($intime);
            $end = Carbon::parse($outtime);
            $minutes = $end->diffInMinutes($start); // 226
            return $this->convertMinuteToHours($minutes);  
    } 

public function convertMinuteToHours($minutes)
    {
        return $minutes / 60;
    }

$totalHour = $this->convTimeToMinutes('09:25:35', '13:12:27');
//$totalHour = 3.76

答案 5 :(得分:0)

您可以将此类操作作为通用函数

private function calculateDiffInMinutes($from, $to)
{
    $from = Carbon::createFromFormat('Y-m-d H:s:i', $from);
    $to = Carbon::createFromFormat('Y-m-d H:s:i', $to);
    return $to->diffInMinutes($from);
}

,您可以在任何地方调用该函数并传递所需的参数 在这里,现在和创建时间之间的区别

$this->calculateDiffInMinutes($item->created_at, now())

希望这对您有帮助