如何添加不同的时间戳

How to add different timestamp

我在添加两 (2) 个时间戳时遇到问题,例如:

00:30:00
00:45:31
========
01:15:31 

我不知道如何使用 laravel 和碳...

我的做法是制作 TimeHelper class,我在其中声明与时间计算相关的所有静态方法。 所以基本上我会在 TimeHelper class:

中创建这样的静态函数
public static function addTwoTimes($time1 = "00:00:00", $time2 = "00:00:00"){
        $time2_arr = [];
        $time1 = $time1;
        $time2_arr = explode(":", $time2);
        //Hour
        if(isset($time2_arr[0]) && $time2_arr[0] != ""){
            $time1 = $time1." +".$time2_arr[0]." hours";
            $time1 = date("H:i:s", strtotime($time1));
        }
        //Minutes
        if(isset($time2_arr[1]) && $time2_arr[1] != ""){
            $time1 = $time1." +".$time2_arr[1]." minutes";
            $time1 = date("H:i:s", strtotime($time1));
        }
        //Seconds
        if(isset($time2_arr[2]) && $time2_arr[2] != ""){
            $time1 = $time1." +".$time2_arr[2]." seconds";
            $time1 = date("H:i:s", strtotime($time1));
        }

        return date("H:i:s", strtotime($time1));
    } 

因此,无论您需要求和两次,只需调用 TimeHelper::addTwoTimes(arg1, arg2);

我从这个主题中获取了用户 Cha 的示例函数:PHP add up two time variables

你不能像整数一样添加时间。其中一种方法是将其转换为另一种格式,然后添加。添加后,将其转换回时间类型。

例如,试试这个:

$time1 = "00:30:00";
$time2 = "00:45:31";

$secs = strtotime($time2) - strtotime("00:00:00");
$result = date("H:i:s", strtotime($time1) + $secs);

dd($result); // "01:15:31"

这就是您如何使用 Carbon 日期实现相加两次的方法。解释显示在行内注释

$time1 = '00:30:00';
$time2 = '00:45:31';

// Use the first time to crate a new Carbon date
$baseDate = Carbon::parse($time1);

// Deconstruct the second time into hours, minutes and seconds
list($addHour, $addMinutes, $addSeconds) = explode(':', $time2);

// Add the hours, minutes and seconds to the Carbon object
$baseDate->addHours($addHour)->addMinutes($addMinutes)->addSeconds($addSeconds);

// Print the result: 00:30:00 + 00:45:31 = 01:15:31
echo "{$time1} + {$time2} = " .  $baseDate->toTimeString();

您可以使用 Carbon 库中的 CarbonInterval class:

$durations = [
    '00:30:00',
    '00:45:31',
];

function getDuration($string)
{
    [$hours, $minutes, $seconds] = explode(':', $string);

    return CarbonInterval::hours($hours)->minutes($minutes)->seconds($seconds);
}

$total = getDuration(array_shift($durations));

foreach ($durations as $duration) {
    $total->add(getDuration($duration));
}

echo $total->cascade()->format('%h:%i:%s'); // 1:15:31