JavaScript 计算 目标时间 与 当前时间 的 时间差

js 计算 某个时间 与 现在 的时间差

在消息提示中,经常会用到这条消息是多久之前发送的,这就需要计算消息产生时间和当前时间的时间差,代码如下:

function getTimeAgo(period) {
    var yearLevelValue = 365 * 24 * 60 * 60 * 1000;
    var monthLevelValue = 30 * 24 * 60 * 60 * 1000;
    var dayLevelValue = 24 * 60 * 60 * 1000;
    var hourLevelValue = 60 * 60 * 1000;
    var minuteLevelValue = 60 * 1000;
    var secondLevelValue = 1000;

    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 != 0)result = result + year + "年";
        if (month != 0)result = result + month + "月";
        if (day != 0)result = result + day + "天";
        if (hour != 0) result = result + hour + "时";
        if (minute != 0) result = result + minute + "分";
        if (second != 0) 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问题,因此将上述函数修改成为计算结果向下取整。
再次对原文作者表示感谢。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值