Php 防止";“一小时”&引用;“一分钟”&引用;“一天”;

Php 防止";“一小时”&引用;“一分钟”&引用;“一天”;,php,time,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";

如果我的代码如下所示:

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";
if($seconds<60)
$interval=“$seconds-seconds-ago”;
其他的
如果($s<3600)
$interval=地板($s/60)。“分钟前”;
其他的
如果($s<86400)
$interval=地板($seconds/3600)。“数小时前”;
其他的
$interval=地板($s/86400)。“几天前”;
我怎样才能摆脱它说这样的话:

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

谢谢:)

算算

else if($seconds < 120)
     $interval = "1 minute ago";
else if($seconds < 172800)
     $interval = "1 day ago"
else if($seconds<120)
$interval=“1分钟前”;
否则如果($s<172800)
$interval=“1天前”
等等。

$time=“120”;
$array=array(“第二个”=>1,
“分钟”=>60,
“小时”=>60,
“日”=>24,
“年”=>365);
$old_time=0;
$old_type=false;
//循环每种类型
foreach($type=>$seconds的数组)
{
//分开
$time=地板($time/$seconds);
//如果它进入一个小于0的值,停止除法
如果($time<1)
{
$time=$old_时间;
$type=$old\u type;
打破
}
其他的
{
//继续分裂。
$old_time=$time;
$old_type=$type;
}
}
如果($time==1)
{
$interval=$time.“$type.“ago”;
}
其他的
{
$interval=$time.“$type.s ago”;
}
回声间隔;

这将划分所有可能的时间类型,并给出一个不会将其转化为分数的时间类型。通过将数字值与类型分开,我们可以测试数字是否==1,并更正单词。

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

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";
        }
    }
}
if($seconds<60){
$interval=“$seconds second.”(($seconds!=1)?“s”:“)”之前;
}否则{
如果($s<3600){
$分钟=地板($秒/60);
$interval=“$minutes-minutes.”(($minutes>1)?“s”:“)”之前;
}否则{
如果($s<86400){
$hours=地板($seconds/3600);
$interval=“$hours-hour.”(($hours>1)?“s”:“)”之前;
}否则{
$days=下限($seconds/86400);
$interval=“$days-day.”(($days>1)?“s”:“)”之前;
}
}
}
另一个解决方案

if($seconds < 60)
  $interval = "$seconds second";
 else
   if($seconds < 3600)
     $interval = floor($seconds / 60) . " minute";
   else
     if($seconds < 86400)
       $interval = floor($seconds / 3600) . " hour";
     else
       $interval = floor($seconds / 86400) . " day";
$interval .= (reset(explode(" ", $interval)) != 1 ? "s" : "")." ago";
if($seconds<60)
$interval=“$seconds second”;
其他的
如果($s<3600)
$interval=地板($s/60)。“分钟”;
其他的
如果($s<86400)
$interval=地板($seconds/3600)。“小时”;
其他的
$interval=地板($s/86400)。“日”;
$interval.=(重置(爆炸(“,$interval))!=1?“s”:“)”之前;

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

sprintf(ngettext('%d minute', '%d minutes', $amount), $amount);
您可以为其创建一个包装函数:

function pluralize($singular, $plural, $num) {
  return sprintf(ngettext($singular, $plural, $num), $num);
}
这是最好的方法。

if($interval<60){
if ($interval < 60) {
    $unit = 'Second';
} else if ($interval < 1440) {
    $unit = 'Minute'; $interval /= 60;
} else if ($interval < 86400) {
    $unit = 'Hour'; $interval /= 1440;
} else {
    $unit = 'Day'; $interval /= 86400;
}
$interval = intval($interval);
$interval = "$interval  $unit" . ($interval == 1 ? '' : 's') . " ago";
$unit='Second'; }否则如果($interval<1440){ $unit='Minute';$interval/=60; }否则,如果($间隔<86400){ $unit='Hour';$interval/=1440; }否则{ $unit='Day';$interval/=86400; } $interval=intval($interval); $interval=“$interval$unit”。($interval==1?“”:“s”)。“以前”;
这里是一个通用的PHP剪报,用于获取字符串,如“1个月前、2周前和30秒前”

$timeUnits=数组(“月”=>2592000, “周”=>604800, “日”=>86400, “小时”=>3600, “分钟”=>60, “第二”=>1); $tmpSeconds=$seconds; $timeAgoStrings=array(); foreach($name=>$numfoseconds的时间单位){ 如果($seconds>$numOfSeconds){ $val=地板($tmpSeconds/$numoses); $agoStr=($val>1)?$name。“s”:$name; $timeAgoStrings[]=“$val$agoStr”; $tmpSeconds=$tmpSeconds-$val;//从tmpSeconds变量中删除使用的时间单位 } } //检查是否有多个字符串-如果有,我们将弹出最后一个val,并在最后一个val之前添加“and”前缀,而不是逗号 如果(计数($timeAgoStrings)>1){ $lastString=array\u pop($timeAgoStrings); $timeAgoStr=内爆(“,”,$timeAgoStrings)。“和$lastString ago”; }否则{ $timeAgoStr=$timeAgoStrings[0]“ago”; }
只要你不去国际,是的。不适用于所有语言;-)只是更新了一些不同的东西。花了一段时间。只是更新了一些更可扩展的东西。您可以非常轻松地执行以下操作:)$interval=“$minutes”。(($minutes>1)?“minutes”:“minutes”)。“以前”;少一点重复:-)@Philippe Gerber-LOL@Karma-我希望这样称呼它。我应用了你建议的编辑,菲利普,把它缩短了一点:)第一次我甚至把它搞砸了。我真傻!只是为了学究,你可以把它改成abs($seconds)!=1这样负数就行了-1秒,-2秒:p给出-1时,请描述您的应用程序为何可本地化?您可以使用“通用”复数:天、小时、分钟等等
if ($interval < 60) {
    $unit = 'Second';
} else if ($interval < 1440) {
    $unit = 'Minute'; $interval /= 60;
} else if ($interval < 86400) {
    $unit = 'Hour'; $interval /= 1440;
} else {
    $unit = 'Day'; $interval /= 86400;
}
$interval = intval($interval);
$interval = "$interval  $unit" . ($interval == 1 ? '' : 's') . " ago";
$timeUnits = array("month" => 2592000, "week" => 604800, "day" => 86400, "hour" => 3600, "minute" => 60, "second" => 1); $tmpSeconds = $seconds; $timeAgoStrings = array(); foreach ($timeUnits as $name => $numOfSeconds) { if ($seconds > $numOfSeconds) { $val = floor($tmpSeconds / $numOfSeconds); $agoStr = ($val > 1) ? $name."s" : $name; $timeAgoStrings[] = "$val $agoStr"; $tmpSeconds = $tmpSeconds - $val; // cut the used time units off our tmpSeconds variable } } //check if we have more than one string - in case we do then we will pop the last val and add an "and" prefix before the last val instead of a comma if (count($timeAgoStrings) > 1) { $lastString = array_pop($timeAgoStrings); $timeAgoStr = implode(", ",$timeAgoStrings)." and $lastString ago"; } else { $timeAgoStr = $timeAgoStrings[0]." ago"; }