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";
}