使用 Laravel 和 Carbon 确定两个日期之间的差异是否以月、周或天的形式显示

问题描述 投票:0回答:2

我想知道如何显示开始日期和结束日期之差的天数。例如:

使用 Carbon 的 diffInDays()

$diff = $start_date->diffInDays($end_date)

现在,假设 $start_date 和 $end_end 相差 30 天。我们都知道,当使用模运算(%)时,我们可以显示两者相差1个月,因为30可以被30整除,这与相差7天是一样的,我们可以将其显示为1周。

但是当差异例如是 35 天时,35%30 = 5,我们还剩下 5 天。我的问题是如何将其显示为简单的“35 天”。这是我到目前为止所做的。

$start_date = Carbon::parse($job->start_date);
$end_date = Carbon::parse($job->end_date)

$diff = $start_date->diffInDays($end_date);

if ($diff%30 == 0) {

  //show $result as 1 Month    

} else if ($diff%7 == 0) {

  //show $result as 1 Week  

} else {

  //show $result as $diff  

}

dd($result)

laravel php-carbon
2个回答
0
投票

当您正在处理 Carbon 的实例并希望以人类可读的格式显示时间戳时,您可以执行如下操作:

$start_date = Carbon::parse($job->start_date);
$end_date = Carbon::parse($job->end_date);
$start_date->diffForHumans($end_date, true); // 1 week

根据时间戳,它将返回诸如:3 秒前、1 周前、1 个月前等信息。

编辑: 第二个参数 i

true
删除了返回字符串的“ago”部分,因此如果没有它,返回值将是“1 周前”而不是“1 周”


0
投票

终于开始工作了,这就是我所做的

$start_date = Carbon::parse('2023-08-18');
$end_date = Carbon::parse('2023-09-15';

// Calculate the differences
$months = $start_date ->floatDiffInMonths($end_date );
$weeks = $start_date ->floatDiffInWeeks($end_date );

if (fmod($months, 1) == floatval(0)) {
   dd($months.' '.'Month/s');
} elseif (fmod($weeks, 1) == floatval(0)) {
   dd($weeks.' '.'Week/s');
} else {
   $days =  $start_date ->diffInDays($end_date );
   dd($days .' '.'Day/s');
}

结果将是“4周/秒”

© www.soinside.com 2019 - 2024. All rights reserved.