Carbon:比较 diffForHumans
Carbon: compare diffForHumans
我正在使用 Laravel 5.3 和 Carbon 库。
我正在尝试比较多个 diffForHumans
结果。
例如我有三个不同点:
3 weeks after
7 days after
2 days after
是否可以比较这些以找到最小值、最大值和平均值?
在本例中为:
- 分钟:2 天
- 最长:3 周
- 平均:10 天
如有必要,我可以使用 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'
),也可以翻译成另一种语言。所以你必须小心操作它的输出。
注:以上代码只是脑补了一下
我正在使用 Laravel 5.3 和 Carbon 库。
我正在尝试比较多个 diffForHumans
结果。
例如我有三个不同点:
3 weeks after
7 days after
2 days after
是否可以比较这些以找到最小值、最大值和平均值?
在本例中为:
- 分钟:2 天
- 最长:3 周
- 平均:10 天
如有必要,我可以使用 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'
),也可以翻译成另一种语言。所以你必须小心操作它的输出。
注:以上代码只是脑补了一下