2011-05-05 61 views
0

我试过调用:echo PrettyTime(time() - 70 * 60),期待它会说1 hour ago,但它代之以70 minutes ago,我似乎无法弄清楚为什么......我认为这可能是一个四舍五入问题,我是太愚蠢找到,但这里是我正在使用的代码:不知道这是什么问题

function PrettyTime($time) 
    {  
    $current = time(); 

    if ($time == $current) 
     return 'just now'; 
    if ($time == 0) 
     return 'a long time ago'; 

    $time = $current - $time; 

    $intervals = array 
    (
     'year' => 29030400, 
     'month' => 2592000, 
     'week' => 604800, 
     'day' => 86400, 
     'hour' => 3600, 
     'minute' => 60, 
     'second' => 1 
    ); 

    foreach($intervals as $word => $interval) 
    { 
     $works = intval($time/$interval); 
     $future = $works < 0; 

     if (!$works) 
     continue; /* keep going through, silly! */ 
     else 
     { 
     if (!$future && $works == 1) 
     { 
      switch($word) 
      { 
      case 'year': return 'last year'; 
      case 'month': return 'last month'; 
      case 'week': return 'last week'; 
      case 'day': return 'yesterday'; 
      default:  break; 
      } 
     } 
     else 
      break; 
     } 
    }  

    return abs($works) . ' ' . $word . ($works ? 's' : '') . ($future ? ' in the future' : ' ago'); 
    } 

回答

3

实际运行的代码: - 它是default:子句中的break;。那里必须使用break 2;来突破交换机的foreach。

+0

这很了解。我不知道PHP有这样一种机制来打破2,打破两件事情。 – robx 2011-05-05 01:58:56

1

你并不总是break当你似乎想要的外面foreach循环。尝试删除最后的else行并在其下的break声明中删除缩进。

相关问题