【发布时间】:2014-01-25 04:34:49
【问题描述】:
我一直在考虑创建一个自定义的 time ago 函数,它接受一个日期并以人类可读的格式返回这是过去或未来多长时间。
虽然我不想使用标准的 timeago 函数,但我希望它仅在日期小于 20 周前返回以周和天为单位的时间。如果日期超过 20 周,则它可以像往常一样返回以年、月、周和日为单位的时间。
我目前的功能如下,但如果日期是 9 周前(即 2013 年 11 月 5 日),它会返回 2 个月零 2 天前的时间,而不是 9 周前。
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';
}
【问题讨论】:
-
我在你的代码中没有看到任何 20,你在哪里检查 20 周的事情?
-
尝试一下,如果不行我们会帮忙