Carbon:比较 diffForHumans

Carbon: compare diffForHumans

我正在使用 Laravel 5.3 和 Carbon 库。

我正在尝试比较多个 diffForHumans 结果。

例如我有三个不同点:

3 weeks after

7 days after

2 days after

是否可以比较这些以找到最小值、最大值和平均值?

在本例中为:

如有必要,我可以使用 diff 而不是 diffForHumans(在我看来,这将获得精确的平均结果)。

感谢任何有关 Google 的指点,因为我找不到关于这个主题的任何内容,所以我希望我正在寻找错误的东西。

谢谢!

diffForHumans 的输出是,嗯,对于人类来说,正如我们所知,人类是糟糕的计算器。别这样。

给定一个 \Carbon 数组,您可以按如下方式计算您的值:

$carbons = [ ... ];
$diffs   = array_map(function ($c) { return $c->diffInSeconds(); }, $carbons);
$max = $carbons[array_search(max($diffs), $diffs)];
$min = $carbons[array_search(min($diffs), $diffs)];
$avg = array_sum($diffs)/count($diffs);

如果你坚持要对diffForHumans的输出进行排序,你可以关闭修饰符和数值。订购后,您可以移动最小值并弹出最大值:

function score($c) {
    $scores = [ 1 => 'second', 'minute', 'hour', 'day', 'week', 'month', 'year' ];
    $diff = $c->diffForHumans();
    foreach ($scores as $multiplier => $word) {
        if (false !== strpos($diff, $word)) {
            return $multiplier * (int)$diff;
        }
    }
    return (int)$diff;
}
usort(
    $carbons,
    function ($a, $b) { return score($a) <=> score($b); }
);

请记住,diffForHumans 输出可以是简短格式(例如,'d' 而不是 'day'),也可以翻译成另一种语言。所以你必须小心操作它的输出。

注:以上代码只是脑补了一下