防止"一小时""一小时""一天"

3 php time

如果我的代码如下:

if($seconds < 60)
  $interval = "$seconds seconds ago";
else
 if($seconds < 3600)
     $interval = floor($seconds / 60) . "minutes ago";
else
    if($seconds < 86400)
         $interval = floor($seconds / 3600) . "hours ago";
    else
         $interval = floor($seconds / 86400) . "days ago";
Run Code Online (Sandbox Code Playgroud)

我怎么能摆脱它说:

1天前 1年前 1分钟前.1小时前

谢谢 :)

kar*_*m79 7

可以用三元运算符非常简洁地完成:

if($seconds < 60) {
    $interval = "$seconds second" . (($seconds != 1) ? "s" : "") . " ago";
} else {
    if($seconds < 3600) {
        $minutes = floor($seconds / 60);
        $interval = "$minutes minute" . (($minutes > 1) ? "s" : "") . " ago";
    } else {
        if($seconds < 86400) {
            $hours =  floor($seconds / 3600);
            $interval = "$hours hour" . (($hours > 1) ? "s" : "") . " ago";
        } else {
            $days = floor($seconds / 86400);
            $interval = "$days day" . (($days > 1) ? "s" : "") . " ago";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


moo*_*moo 7

如果您的应用是国际性的并使用gettext扩展,您可以执行以下操作:

sprintf(ngettext('%d minute', '%d minutes', $amount), $amount);
Run Code Online (Sandbox Code Playgroud)

您可以为它创建一个包装函数:

function pluralize($singular, $plural, $num) {
  return sprintf(ngettext($singular, $plural, $num), $num);
}
Run Code Online (Sandbox Code Playgroud)

这是最好的方式imo.