2012-09-01 40 views
0

我试图将间隔转换为单词。我遇到了这个错误Argument 1 passed to Database::intervalToWords() must be an instance of DateInterval, string given。我如何解决这个问题,所以我没有得到一个错误?将时间转换为DataInterval实例

//query from database 

function one() { 
      $posted = htmlspecialchars(strtotime($row['posted']),ENT_QUOTES); 
          $time_now = time(); //current date/time 

         $newposted = date('Y-m-d h:i:s',($time_now-$posted)); 

         $newposted = $this->intervalToWords($newposted); 

} 





function intervalToWords(DateInterval $interval) 
{ 
    $intervalStr = ''; 
    if ($interval->y > 0) { 
    //if over a year 
     $intervalStr = 'Over ' . $interval->y . ' year' . ($interval->y > 1 ? 's' : ''); //years or year 
    } else { 
     if ($interval->m > 2) { 
     //if over 2 months 
      $intervalStr = $interval->m . ' months'; 
     } else if ($interval->m > 0) { 
      //if a month 
      $intervalStr = $interval->m . ' month' . ($interval->m > 1 ? 's' : '') . ' and ' . $interval->d . ' day' . ($interval->d > 1 ? 's' : ''); 
     } else { 
      if ($interval->d > 1) { 
       //if over a day 
       $intervalStr = $interval->d . ' days'; 
      } else if($interval->d == 1) { 
       //if a day 
       $intervalStr = '1 day, ' . $interval->h . ' hour' . ($interval->h > 1 ? 's' : ''); 
      } else { 
       if ($interval->h > 0) { 
       //if over an hour 
        $intervalStr = $interval->h . ' hour' . ($interval->h > 1 ? 's' : '') . ', '; 
       } 
       if ($interval->i > 0) { 
       //if over a minute 
        $intervalStr .= $interval->i . ' minute' . ($interval->i > 1 ? 's' : ''); 
       } else { 
        $intervalStr = 'less than 1 minute'; 
       } 
      } 
     } 
    } 

    return $intervalStr . ' ago'; 
} 
+0

你已经清楚地复制/粘贴一些教程验证码,甚至没有阅读它,如果你问这样的问题。 –

回答

0

您可能正在寻找:DateTime::diff()

但你需要一个基准DateTime从把分差

+0

我可以将time()转换为DateTime格式吗? – user892134

+0

是的,使用[DateTime :: setTimestamp()](http://www.php.net/manual/en/datetime.settimestamp.php)。 –

+0

我试过使用差异,我得到这个错误'调用未定义的方法DateTime :: diff' ..这是什么意思? – user892134

0

而且你可能忘记将DateInterval对象的实例:

//query from database  
function one() { 
      $posted = htmlspecialchars(strtotime($row['posted']),ENT_QUOTES); 
          $time_now = time(); //current date/time 

         //$newposted = date('Y-m-d h:i:s',($time_now-$posted)); 
         $dv = new DateInterval('PT'.($time_now-$posted).'S'); 

         $newposted = $this->intervalToWords($dv); 

} 
+0

如果这可行,这是比我更直接的解决方案。 –

+0

我得到这个错误'Class'DateInterval'找不到'? – user892134

+0

(PHP 5> = 5.3.0)? – gvsrepins