其实这个功能应该自己写的,可是我想全知全能的qiang哥说不定会提供现成的呢。就是把一个日期格式化为:1 day ago 或 1 hour ago
其实这个功能应该自己写的,可是我想全知全能的qiang哥说不定会提供现成的呢。就是把一个日期格式化为:1 day ago 或 1 hour ago
时间比较是有现成的php函数或者方法可用,需要php5.3。
你可以用这个:
function ago($time, $since=null)
{
$patterns = array(
'seconds' => t('less than a minute'),
'minute' => t('about a minute'),
'minutes' => t('%d minutes'),
'hour' => t('about an hour'),
'hours' => t('about %d hours'),
'day' => t('a day'),
'days' => t('%d days'),
'month' => t('about a month'),
'months' => t('%d months'),
'year' => t('about a year'),
'years' => t('%d years'),
);
if($since===null)
$since=time();
if(!is_int($since) && !ctype_digit($time))
$since = strtotime($since);
if(!is_int($time) && !ctype_digit($time))
$time = strtotime($time);
$seconds = abs($since - $time);
$minutes = $seconds/60;
$hours = $minutes/60;
$days = $hours/24;
$weeks = $days/7;
$months = $days/30;
$years = $days/365;
if($seconds < 45)
$words = $patterns['seconds'];
else if($seconds < 90)
$words = $patterns['minute'];
else if($minutes < 45)
$words = sprintf($patterns['minutes'], $minutes);
else if($minutes < 90)
$words = $patterns['hour'];
else if($hours < 24)
$words = sprintf($patterns['hours'], $hours);
else if($hours < 48)
$words = $patterns['day'];
else if($days < 30)
$words = sprintf($patterns['days'], $days);
else if($days < 60)
$words = $patterns['month'];
else if($days < 365)
$words = sprintf($patterns['months'], $months);
else if($years < 2)
$words = $patterns['year'];
else
$words = sprintf($patterns['years'], $years);
$suffix = $since - $time > 0 ? 'ago' : 'from now';
if($since - $time > 0)
return $words.' ago';
else
return $words.' from now';
}
多谢两位,尤其是qiang哥。不知道有没有提交到扩展库,这是个很使用的功能。
问个问题 t() 是yii自带的函数吗,我的报错说未定义啊。
我查了下,t函数是多语言函数,可以去掉,我再研究一下。
好了,如果没有多语言的话,直接把t函数去掉就行了。
自己弄个class放到components就行