0

投稿から日付を取得し、投稿された時間を書き込む機能があります。関数を使用すると、奇妙な理由で 43 年と 4 か月前に投稿されたと表示されます。

function relativeTime($date,$precision=2)
{
$times=array(365*24*60*60   => "year",
            30*24*60*60     => "month",
            7*24*60*60      => "week",
            24*60*60        => "day",
            60*60           => "hour",
            60              => "minute",
            1               => "second");

$passed=time()-$date;

if($passed<5)
{
    $output='less than 5 seconds ago';
}
else
{
    $output=array();
    $exit=0;
    foreach($times as $period=>$name)
    {
        if($exit>=$precision || ($exit>0 && $period<60))    break;
        $result = floor($passed/$period);

        if($result>0)
        {
            $output[]=$result.' '.$name.($result==1?'':'s');
            $passed-=$result*$period;
            $exit++;
        }

        else if($exit>0) $exit++;

    }
    $output=implode(' and ',$output).' ago';
}

return $output;
}

次を使用して日付を入力しています: $date = date("Y-m-d H:i:s");

$passed=time()-$dateオフですか?

みんな、ありがとう!

4

3 に答える 3

1

これを行うには、もっと良い方法があります。DateTime とそれに関連するクラスを使用します。コードは、タイム ゾーンと夏時間が考慮されているため、より単純で正確です。

$datetime1 = new DateTime();
$datetime2 = new DateTime('2013-01-03 17:13:00');
$interval  = $datetime1->diff($datetime2);
$elapsed   = $interval->format('%y years, %m months, %a days, %h hours, 
                              %i minutes, %S seconds');
$elapsed = str_replace(array('0 years,', ' 0 months,', ' 0 days,', 
                            ' 0 hours,', ' 0 minutes,'), '', $elapsed);
$elapsed = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ', 
                             ' 1 hours, ', ' 1 minutes'), array('1 year, ', 
                             '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), 
                       $elapsed);
echo $elapsed;
于 2013-05-13T00:20:34.957 に答える