2013-08-21 71 views
0

目前,下面的代碼僅在一個月或更短的時間內獲得與「1個月」相同的任何日期差異。我想要做的是如果差異小於一個月,輸出多少天 - 「XX天」。然後如果不到一天,輸出多少個小時 - 「XX小時」。需要擴展DateDiff以獲取更多詳細信息

任何幫助,將不勝感激。謝謝。

function getDateDiff(timestamp) { 
    if (null == timestamp || timestamp == "" || timestamp == "undefined") return "?"; 
    var splitDate = ((timestamp.toString().split('T'))[0]).split('-'); 
    var d1 = new Date(); 
    var d1Y = d1.getFullYear(); 
    var d2Y = parseInt(splitDate[0], 10); 
    var d1M = d1.getMonth(); 
    var d2M = parseInt(splitDate[1], 10); 
    var diffInMonths = (d1M + 12 * d1Y) - (d2M + 12 * d2Y); 
    if (diffInMonths <= 1) return "1 month"; 
    else if (diffInMonths < 12) return diffInMonths + " months"; 
    var diffInYears = Math.floor(diffInMonths/12); 
    if (diffInYears <= 1) return "1 year"; 
    else if (diffInYears < 12) return diffInYears + " years" 
} 

回答

0

這是我用$的ptime是時間戳

function ElapsedTime($ptime) 
{ 
    $etime = time() - $ptime; 

    if ($etime < 1) 
    { 
     return '0 seconds'; 
    } 

    $a = array(12 * 30 * 24 * 60 * 60 => 'year', 
       30 * 24 * 60 * 60  => 'month', 
       24 * 60 * 60   => 'day', 
       60 * 60     => 'hour', 
       60      => 'minute', 
       1      => 'second' 
       ); 

    foreach ($a as $secs => $str) 
    { 
     $d = $etime/$secs; 
     if ($d >= 1) 
     { 
      $r = round($d); 
      return $r . ' ' . $str . ($r > 1 ? 's' : '') . ' ago'; 
     } 
    } 
} 
+0

不幸的是我在這方面缺乏知識的使用,我不能像這樣一個完全不同的編碼路線走。這會導致我不得不更改其他代碼區域,我不知道從哪裏開始。我目前只修改原始代碼。 – BZCS

+0

好的。但是,除非你只是將一個時間戳傳遞給一個函數,否則應該只是在函數內部替換內容。但是我會回覆你使用的相同功能,但有時可能會在某些時候... –

+0

像'24 * 60 * 60'這樣的東西很危險:因爲夏令時有些日子可能會持續23小時,其他的25日。在這種情況下,我不相信你會需要100%的準確性,但請記住! – Qualcuno