0

間隔を言葉に変換しようとしています。このエラーに遭遇しましArgument 1 passed to Database::intervalToWords() must be an instance of DateInterval, string givenた。エラーが発生しないようにするには、どうすればこれを解決できますか?

//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';
}
4

2 に答える 2

0

あなたはおそらく探している:DateTime::diff()

DateTimeただし、差分をとるベースラインが必要です。

于 2012-09-01T16:06:17.403 に答える
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);

}
于 2012-09-01T16:14:46.530 に答える