You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何忽略日期计算两个Carbon对象的分钟差值?

忽略日期计算两个时间点的分钟差

给定起始日期:

$start = Carbon::parse('2023-03-01 10:00:00');

结束日期:

$end = Carbon::parse('2023-03-02 17:00:00');

需要忽略日期部分,计算两个时间点(10:00:00 至 17:00:00)之间的分钟数。

当前实现方式:

$time_end = $end->toTimeString();
$time_start = $start->toTimeString();
$duration = Carbon::parse($time_end)->diffInMinutes(Carbon::parse($time_start));

但这种方法通过toTimeString()转成字符串后重新解析,脱离了原Carbon对象,不够优雅。虽然CarbonInterface里没有直接对应的方法,但肯定有更优的实现方式。

我想到的另一种思路:

$duration = $end->diffInMinutes($start) - 24 * 60 * $end->diffInDays($start);

更优雅的Carbon原生实现

你可以直接将两个Carbon实例的日期部分统一,再计算时间差,全程保持Carbon对象操作:

// 复制结束时间并将日期设置为与起始时间一致,再计算分钟差
$duration = $end->copy()->setDate($start->year, $start->month, $start->day)->diffInMinutes($start);

// 或者用更简洁的语法
$duration = $end->copy()->sameAs($start, 'day')->diffInMinutes($start);

这种方法避免了字符串转换的额外开销,同时保留了Carbon的链式调用特性,代码更易读维护。

内容的提问来源于stack exchange,提问作者JanBoehmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:55:09