如何忽略日期计算两个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
相关产品推荐
相关产品推荐

