2013-08-21 31 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