2017-10-15 2 views
2

私は現在のデータベースと日付の差を計算しています。これは私のPHPコードでTimeAgo()という関数を使用しています。年を差し引くと異なる結果が返されます

TimeAgo()コード:

function TimeAgo ($oldTime, $newTime) 
    { 
     $timeCalc = strtotime($newTime) - strtotime($oldTime); 
     if ($timeCalc >= (60*60*24*30*12*2)){ 
      $timeCalc = intval($timeCalc/60/60/24/30/12) . " years ago"; 
     }else if ($timeCalc >= (60*60*24*30*12)){ 
      $timeCalc = intval($timeCalc/60/60/24/30/12) . " year ago"; 
     }else if ($timeCalc >= (60*60*24*30*2)){ 
      $timeCalc = intval($timeCalc/60/60/24/30) . " months ago"; 
     }else if ($timeCalc >= (60*60*24*30)){ 
      $timeCalc = intval($timeCalc/60/60/24/30) . " month ago"; 
     }else if ($timeCalc >= (60*60*24*2)){ 
      $timeCalc = intval($timeCalc/60/60/24) . " days ago"; 
     }else if ($timeCalc >= (60*60*24)){ 
      $timeCalc = " Yesterday"; 
     }else if ($timeCalc >= (60*60*2)){ 
      $timeCalc = intval($timeCalc/60/60) . " hours ago"; 
     }else if ($timeCalc >= (60*60)){ 
      $timeCalc = intval($timeCalc/60/60) . " hour ago"; 
     }else if ($timeCalc >= 60*2){ 
      $timeCalc = intval($timeCalc/60) . " minutes ago"; 
     }else if ($timeCalc >= 60){ 
      $timeCalc = intval($timeCalc/60) . " minute ago"; 
     }else if ($timeCalc > 0){ 
      $timeCalc .= " seconds ago"; 
     }else if ($timeCalc == 0){ 
      $timeCalc = "Just now"; 
     } 
     return $timeCalc; 
    } 

すべてがデータベース内の値の周りのI混乱するまで、正常に動作します。日付を1901-01-01 00:00:00に設定すると、結果は116 years agoとして返されますが、代わりに​​と表示されます。

私は出力を表示するには、このコードを使用しています:

echo TimeAgo($db_user['far_date'], date("Y-m-d H:i:s")) 

は単純なものではPHPは日付時刻を計算するとき、私は欠けているありますか?

+0

有効なタイムスタンプの範囲は、通常、金曜日、1901年12月13日20:45:54 UTCから火曜日、2038年1月19日03:14:07 UTCです。 (これらは、32ビット符号付き整数の最小値と最大値に対応する日付です) –

+1

日付の範囲がより広い場合は、64ビットのPHP(64ビットタイムスタンプ値で動作)を使用するか、 DateTimeオブジェクト –

答えて

2

使用しているPHPのバージョンによって異なると思います。私はオンラインで見つけました:

しかし、PHP 5.1.0より前のこのシステムでは、一部のシステム(Windowsなど)ではこの範囲が01-01-1970から19-01-2038に制限されていました。

この既定の日付は、48年前に発生しました。これは、取得したものと一致します。新しいバージョンの範囲で

がある:Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT.

本当にこの日付を使用したい場合は、私が1000年から範囲を使用してリコールとしてこれ、あなたが直接、MySQLの上でそれを行うことをお勧めします。

+1

"この日付を本当に使用したい場合は、MySQLで直接行うことをお勧めします。これは、0001年の範囲を使用して思い出しています。"いいえDATE型は日付部分を持つ値に使用されますが、時間部分。 MySQLはDATE値を取得して 'YYYY-MM-DD'形式で表示します。サポートされている範囲は '1000-01-01'〜 '9999-12-31'です。 –

+0

彼が表示したいのは、経過年数です。彼は時間の部分を気にしない。私は最小の日付に関して編集しますが、それでも彼にとっては十分であるはずです。 @レイモンドナイランド – sagi

関連する問題