天天看點

JavaScript 計算 目标時間 與 目前時間 的 時間差js 計算 某個時間 與 現在 的時間差

js 計算 某個時間 與 現在 的時間差

在消息提示中,經常會用到這條消息是多久之前發送的,這就需要計算消息産生時間和目前時間的時間差,代碼如下:

function getTimeAgo(period) {
    var yearLevelValue =  *  *  *  * ;
    var monthLevelValue =  *  *  *  * ;
    var dayLevelValue =  *  *  * ;
    var hourLevelValue =  *  * ;
    var minuteLevelValue =  * ;
    var secondLevelValue = ;

    function getDifference(period) {
        var year = parseInt(getYear(period));
        var month = parseInt(getMonth(period - year * yearLevelValue));
        var day = parseInt(getDay(period - year * yearLevelValue - month * monthLevelValue));
        var hour = parseInt(getHour(period - year * yearLevelValue - month * monthLevelValue - day * dayLevelValue));
        var minute = parseInt(getMinute(period - year * yearLevelValue - month * monthLevelValue - day * dayLevelValue - hour * hourLevelValue));
        var second = parseInt(getSecond(period - year * yearLevelValue - month * monthLevelValue - day * dayLevelValue - hour * hourLevelValue - minute * minuteLevelValue));
        var result = "";
        if (year != )result = result + year + "年";
        if (month != )result = result + month + "月";
        if (day != )result = result + day + "天";
        if (hour != ) result = result + hour + "時";
        if (minute != ) result = result + minute + "分";
        if (second != ) result = result + second + "秒";

        function getYear(period) {
            return Math.floor(parseInt(period) / yearLevelValue);
        }

        function getMonth(period) {
            return Math.floor(parseInt(period) / monthLevelValue);
        }

        function getDay(period) {
            return Math.floor(parseInt(period) / dayLevelValue);
        }

        function getHour(period) {
            return Math.floor(parseInt(period) / hourLevelValue);
        }

        function getMinute(period) {
            return Math.floor(parseInt(period) / minuteLevelValue);
        }

        function getSecond(period) {
            return Math.floor(parseInt(period) / secondLevelValue);
        }

        return result;
    }

    return getDifference(period);
}
           

以上代碼能夠實作當不足一分鐘的時候隻顯示秒,不足一小時隻顯示分鐘和秒,以此類推。

本文的源代碼源自于http://blog.csdn.net/qq_26744901/article/details/51735988

但是在使用過程中,對原文作者的代碼進行了修改,原文代碼在擷取年月日時分秒的時候使用了如下函數:

function getYear(period) {
    return parseInt(period) / yearLevelValue;  
}  
           

在實際測試過程中,假定時間戳period=4000時,getYear函數傳回的應該是0,但是在Mac OS safari和firefox浏覽器中執行結果傳回1,應該是浮點數轉整數時,出現的計算問題,是以後續計算存在問題,但當period>30000後,函數傳回值為0,不了解是否是浏覽器js問題,是以将上述函數修改成為計算結果向下取整。

再次對原文作者表示感謝。

繼續閱讀