我喜欢 xdebug 的 relativeTime 函数。问题是我需要它有一些粒度。
换句话说,如果我决定在几秒钟或几分钟内停止。
所以现在,
echo fTime(strtotime('-23 hours 5 minutes 55 seconds'),0);
会显示,
23 小时 5 分钟前
代替
23 小时 5 分 55 秒前
如果它达到较高的时间量之一,我还希望它不会在数组中降低。
所以如果它显示年份,我只想显示年份和月份。
所以现在,
echo fTime(strtotime('-1 year 2 months 3 weeks 4 days 16 hours 15 minutes 22 seconds'),0);
会显示
1 年零 2 个月前
代替
1 年 2 个月 3 周 4 天 16 小时 15 分钟 22 秒前
以下代码更改满足了我的需要。道具当然首先去 xdebug。
希望其他人可能会发现它有用:
function fTime($time, $gran=-1) {
$d[0] = array(1,"second");
$d[1] = array(60,"minute");
$d[2] = array(3600,"hour");
$d[3] = array(86400,"day");
$d[4] = array(604800,"week");
$d[5] = array(2592000,"month");
$d[6] = array(31104000,"year");
$w = array();
$return = "";
$now = time();
$diff = ($now-$time);
$secondsLeft = $diff;
$stopat = 0;
for($i=6;$i>$gran;$i--)
{
$w[$i] = intval($secondsLeft/$d[$i][0]);
$secondsLeft -= ($w[$i]*$d[$i][0]);
if($w[$i]!=0)
{
$return.= abs($w[$i]) . " " . $d[$i][1] . (($w[$i]>1)?'s':'') ." ";
switch ($i) {
case 6: // shows years and months
if ($stopat==0) { $stopat=5; }
break;
case 5: // shows months and weeks
if ($stopat==0) { $stopat=4; }
break;
case 4: // shows weeks and days
if ($stopat==0) { $stopat=3; }
break;
case 3: // shows days and hours
if ($stopat==0) { $stopat=2; }
break;
case 2: // shows hours and minutes
if ($stopat==0) { $stopat=1; }
break;
case 1: // shows minutes and seconds if granularity is not set higher
break;
}
if ($i===$stopat) { break 0; }
}
}
$return .= ($diff>0)?"ago":"left";
return $return;
}
马库斯