laravel Carbon diffInMonth()返回错误值

rlcwz9us  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(190)

我正在开发一个Laravel应用程序,偶然发现了碳库的问题,所以我测试了一些东西,发现这段代码:

// Date Diff 1
$st1 = Carbon::parse("2022-11-01");
$fi1 = Carbon::parse("2023-04-01");
$diff1 = $st1->diffInMonths($fi1);

// Date Diff 2
$st2 = Carbon::parse("2022-11-01");
$fi2 = Carbon::parse("2023-03-01");
$diff2 = $st2->diffInMonths($fi2);

dd([
    'Diff 1' => "2022-11-01  ->  2023-04-01  =  $diff1",
    'Diff 2' => "2022-11-01  ->  2023-03-01  =  $diff2",
]);

返回以下内容:

"Diff 1" => "2022-11-01  ->  2023-04-01  =  5"
"Diff 2" => "2022-11-01  ->  2023-03-01  =  3"

有没有人能给我解释一下为什么它是这样工作的,或者甚至是一个建议,我可以如何修复它。
至于版本,我使用的是Laravel 5.7和PHP 7.2.5

ql3eal8s

ql3eal8s1#

如果您尝试这样做,您会发现类似的问题:

$d1 = new \DateTime('2023-02-01');
$d2 = new \DateTime('2023-03-01');
$diff = date_diff($d1,$d2);
dump($diff->m); // months: 0
dump($diff->d); // days: 28
die;

问题来自PHP而不是Laravel,并且与“二月”这个月份有关(因为二月只有28天)。
一个解决方案可能是使用以下命令:

// Date Diff 1
$st1 = Carbon::parse("2022-11-01"); 
$fi1 = Carbon::parse("2023-04-01");
$diff1 = (int)$st1->floatDiffInMonths($fi1);

// Date Diff 2
$st2 = Carbon::parse("2022-11-01");
$fi2 = Carbon::parse("2023-03-03");
$diff2 = (int)$st2->floatDiffInMonths($fi2);

dd([
    'Diff 1' => "2022-11-01  ->  2023-04-01  =  $diff1", // 5
    'Diff 2' => "2022-11-01  ->  2023-03-01  =  $diff2", // 4
]);

相关问题