如何通过 Carbon API 扩展将大于 86400 的时间(以秒为单位)转换为人类可读的时间

How to convert time in seconds Larger than 86400 to human readable by Carbon API extension

我使用了这个问题的认可答案,但是 carbon 没有正确计算时间。

为什么以下代码的输出不同?

$sec = 17279645;
Carbon::now()->addSeconds($sec)->diffForHumans(false, ['parts' => 5]);
CarbonInterval::seconds($sec)->cascade()->forHumans();


"6 months 2 weeks 3 days 54 minutes 4 seconds after"
"7 months 3 days 23 hours 54 minutes 5 seconds"

CarbonInterval::cascade() 使用简单的静态因子:

[
    'milliseconds' => [1000, 'microseconds'],
    'seconds' => [1000, 'milliseconds'],
    'minutes' => [60, 'seconds'],
    'hours' => [60, 'minutes'],
    'dayz' => [24, 'hours'],
    'weeks' => [7, 'dayz'],
    'months' => [4, 'weeks'],
    'years' => [12, 'months'],
]

相同的秒数总是给出相同的输出。

虽然 diffForHumans 考虑了“现在”,但月份实际上有 28 天、30 天或 31 天,(如果你的时间间隔有夏令时,一天可以是 25 小时等)所以是一样的秒数根据当前时间为您提供可变输出。

关于 1 秒的差异,这是因为在您执行 Carbon::now() 的那一刻和您执行 diffForHumans() 的那一刻之间经过了几微秒。所以你的间隔实际上是 17279644.987 而不是 17279645.