两个日期之间的碳差以hh:mm:ss格式表示

mtp*_*ltz 34 date laravel php-carbon laravel-5.1

我试图找出如何获取存储在我们数据库中的两个日期时间字符串,并将其转换为时间格式hh:mm:ss的差异.

我看了看diffForHumans,但是这确实给我想要的格式,并返回之类的东西after,ago等; 这很有用,但不适合我想要做的事情.

持续时间永远不会超过几天,最多只有几个小时.

$startTime = Carbon::parse($this->start_time);
$finishTime = Carbon::parse($this->finish_time);

$totalDuration = $finishTime->diffForHumans($startTime);
dd($totalDuration);

// Have: "21 seconds after"
// Want: 00:00:21
Run Code Online (Sandbox Code Playgroud)

mtp*_*ltz 44

我最终使用Carbon获取总秒数差异:

$totalDuration = $finishTime->diffInSeconds($startTime);
// 21
Run Code Online (Sandbox Code Playgroud)

然后使用gmdate:

gmdate('H:i:s', $totalDuration);
// 00:00:21
Run Code Online (Sandbox Code Playgroud)

如果有人有更好的方式我会感兴趣.否则这是有效的.

  • 只有我能想到的其他方式是`$ finishTime-> diff($ startTime) - > format('%H:%i:%s');` (23认同)
  • 仅当 diffInSeconds < 86400(24 小时)时才有效。使用 `floor($totalDuration / 3600) 。gmdate(":i:s", $totalDuration % 3600)` 获取> 24小时的持续时间,例如72:16:12(72小时16分钟12秒)。 (3认同)
  • 如果日期有不同的日期(例如1月1日和1月5日),这些都不起作用. (2认同)

STW*_*son 31

$finishTime->diff($startTime)->format('%H:%I:%S');
// 00:00:21
Run Code Online (Sandbox Code Playgroud)


Ada*_*dam 17

$start  = new Carbon('2018-10-04 15:00:03');
$end    = new Carbon('2018-10-05 17:00:09');
Run Code Online (Sandbox Code Playgroud)

您可以使用

$start->diff($end)->format('%H:%I:%S');
Run Code Online (Sandbox Code Playgroud)

这给出了24h模的差

02:00:06

如果您希望在24小时以上获得差异,可以使用:

$start->diffInHours($end) . ':' . $start->diff($end)->format('%I:%S');
Run Code Online (Sandbox Code Playgroud)

这使 :

26:00:06


cdw*_*yer 8

我知道这是一个老问题,但在搜索此类内容时,它仍然位于 Google 结果的顶部,并且 Carbon 在此方面增加了很多灵活性,因此也想在这里放弃 2022 年的解决方案。

\n

TL;DR - 查看该方法的不同/更详细版本的文档diffForHumans,以及对options.

\n

例如,我们需要以小时和分钟显示两个 Carbon 实例 (start和end) 之间的差异,但它们可能相隔超过 24 小时\xe2\x80\x94,在这种情况下,分钟变得不那么有价值/重要的。我们想要排除“ago”或还想用逗号连接字符串。

\n

$options我们可以通过传入 来完成所有这些,diffForHumans如下所示:

\n
use Carbon\\CarbonInterface;\n\n$options = [\n  \'join\' => \', \',\n  \'parts\' => 2,\n  \'syntax\' => CarbonInterface::DIFF_ABSOLUTE,\n];\n\nreturn $end->diffForHumans($start, $options);\n
Run Code Online (Sandbox Code Playgroud)\n

这将产生类似于持续时间中看到的值”列中看到的值:

\n

\n

希望这对某人有帮助!

\n