2017-10-15 65 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; 
    } 

一切正常,直到大約在數據庫中的值我一塌糊塗。如果我將日期設置爲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.

如果你真的想用這個日期,那麼我勸你還是直接做在MySQL,這是我記得使用範圍是從1000年。

+1

「如果你真的想使用這個日期,那麼我建議你直接在MySQL上執行它,我記得使用0001年的範圍」。否DATE類型用於具有日期部分的值,但不是時間部分。 MySQL以'YYYY-MM-DD'格式檢索並顯示DATE值。支持的範圍是'1000-01-01'到'9999-12-31'。 –

+0

他想要顯示的是過去的年數。他不在乎時間部分。我會編輯最低日期,但對他來說仍然足夠。 @RaymondNijland – sagi