私は、日付を受け入れ、これが過去または未来にどれくらい前であったかを人間が読める形式で返す、カスタマイズされたtimeago関数を作成することを検討してきました。
ただし、標準のtimeago関数を使用するのではなく、日付が20週間未満の場合にのみ、時刻を週と日で返すようにします。日付が20週間を超える場合は、通常どおり、年、月、週、日で時間を返すことができます。
これまでの関数は以下のとおりですが、日付が9週間前(2013年11月5日)の場合、9週間前ではなく、2か月前と2日前として返されます。
function time_elapsed_string($datetime, $full = false) {
$now = new DateTime;
$ago = new DateTime($datetime);
$diff = $now->diff($ago);
$diff->w = floor($diff->d / 7);
$diff->d -= $diff->w * 7;
$string = array(
'y' => 'year',
'm' => 'month',
'w' => 'week',
'd' => 'day',
);
foreach ($string as $k => &$v) {
if ($diff->$k) {
$v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
} else {
unset($string[$k]);
}
}
if (!$full) $string = array_slice($string, 0, 1);
return $string ? implode(', ', $string) . ' old' : 'just now';
}
あなたはただ置き換えることができます:
$diff->w = floor($diff->d / 7);
$diff->d -= $diff->w * 7;
と:
if (20 > $diff->days / 7) {
$diff->y = $diff->m = $diff->h = $diff->i = $diff->s = 0;
$diff->w = floor($diff->days / 7);
$diff->d = $diff->days - $diff->w * 7;
} else {
$diff->w = floor($diff->d / 7);
$diff->d -= $diff->w * 7;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加