0

目前,对于任何一个月或更短的日期差异,下面的代码只能准确到“1 个月”。我想做的是如果差异小于一个月,输出多少天 - “XX天”。然后如果不到一天,输出多少小时——“XX小时”。

任何帮助,将不胜感激。谢谢。

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"
}
4

1 回答 1

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';
        }
    }
}
于 2013-08-21T20:13:22.220 回答