【问题标题】:Carbon Difference in Time between two Dates in hh:mm:ss format以 hh:mm:ss 格式表示的两个日期之间的碳时间差
【发布时间】:2016-02-08 02:22:07
【问题描述】:

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

我查看了diffForHumans,但这确实给出了我想要的格式并返回了afterago等内容;这很有用,但不适用于我正在尝试做的事情。

持续时间永远不会跨越数天,最多只有几个小时。

$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

【问题讨论】:

  • 仅供参考,$totalDuration = $finishTime->diffForHumans($startTime, true); dd($totalDuration); 应该返回“21 秒”。我知道这仍然不是您正在寻找的格式,但这就是您删除问题中提到的“之后”和“之前”等内容的方式。

标签: date laravel laravel-5.1 php-carbon


【解决方案1】:

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

$totalDuration = $finishTime->diffInSeconds($startTime);
// 21

然后用gmdate

gmdate('H:i:s', $totalDuration);
// 00:00:21

如果有人有更好的方法,我会很感兴趣。否则这行得通。

【讨论】:

  • 我能想到的唯一其他方法是$finishTime->diff($startTime)->format('%H:%i:%s');
  • 如果日期有不同的日子(例如 1 月 1 日和 1 月 5 日),这些都不起作用。
  • 我已经跨日期(不同的日子)测试了这个解决方案并且它有效。谢谢 mtpultz。
  • 仅在 diffInSeconds floor($totalDuration / 3600) . gmdate(":i:s", $totalDuration % 3600) 获得 > 24 小时的持续时间,例如72:16:12(72 小时 16 分 12 秒)。
  • @Alex 查看我对适用于不同日子的解决方案的回答
【解决方案2】:
$finishTime->diff($startTime)->format('%H:%I:%S');
// 00:00:21

【讨论】:

    【解决方案3】:
    $start  = new Carbon('2018-10-04 15:00:03');
    $end    = new Carbon('2018-10-05 17:00:09');
    

    你可以使用

    $start->diff($end)->format('%H:%I:%S');
    

    以 24h 为模数给出差异

    02:00:06

    如果你想有超过 24 小时的差异,你可以使用:

    $start->diffInHours($end) . ':' . $start->diff($end)->format('%I:%S');
    

    给出:

    26:00:06

    【讨论】:

    • 24 小时以上的解决方案在 24 小时内也能正常工作吗?我的情况是差异可以是两者,即少于或多于 24 小时
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多