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
からの出力をソートしたい場合は、修正や数値のOFFキーことができます。一度注文した、あなたは分をシフトとmaxを開くことができます:
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'
)だけでなく、他の言語に翻訳することができます。だから、その出力を操作するのには注意が必要です。
注:上記のコードは精神的にのみコンパイルされています。
だから根本的に、 'diffInSeconds'を使ってそれらを比較してみましょうか?シンプルで実用的な欠陥は見えません。あなたは私が実装しようとした回避策を信じていないだろう...明日それを試してみるだろうが、それはおそらく、うまくいくはずです!そして1つの修辞的な質問:なぜこれに似た何かがCarbonに実装されていないのですか? – dbr
私はCarbonがこの能力を欠いていると考えています。なぜなら、Carbonは基本的にはtime *のインスタンスであるのに対し、あなたが望む操作はtime *のインスタンスを収集しているからです。 – bishop