JavaScript计算消息推送时间差

消息推送需要显示消息时间和当前时间的差值,显示消息的相对时间状态,比如:“刚刚”这种。

真实项目当中,应当获取服务器返回时间,保证信息和服务器的时间保持一致。本次为个人兴趣玩玩。

因为safari里面对于日期格式“-”不支持,只能解析“/”,所以加入了正则匹配兼容。

function getTime(time) {
var $currentDate = new Date(),
                $createdDate = new Date(time.replace(/-/g, "/")); /*兼容safari的时间判断bug*/
                newTime = $currentDate.getTime();
                oldTime = $createdDate.getTime();
                currentYears = $currentDate.getFullYear();
                intervalTime = getInterval(newTime - oldTime, $createdDate, currentYears); /* 获取时间差 */
                return intervalTime;
        }

function getInterval(intervalTime, $oldDate,currentYears){
                var $interval;
                var days,years,months,hours,minutes,seconds,leave1,leave2,leave2;
                /*计算出相差天数*/
                days=Math.floor(intervalTime/(24*3600*1000))
                /*计算出小时数*/
                leave1=intervalTime%(24*3600*1000)    /*计算天数后剩余的毫秒数*/
                hours=Math.floor(leave1/(3600*1000))
                //计算相差分钟数
                leave2=leave1%(3600*1000)      /*计算小时数后剩余的毫秒数*/
                minutes=Math.floor(leave2/(60*1000))
                //计算相差秒数
                leave3=leave2%(60*1000)      /*计算分钟数后剩余的毫秒数*/
                seconds=Math.round(leave3/1000)
                if(days === 0){
                    if (hours === 0) {
                        if (minutes === 0) {
                            $interval = '刚刚';
                        } else {
                            $interval = minutes + '分钟前';
                        }
                    } else {
                        $interval = hours + '小时前';
                    }
                } else {
                    if (days >3) {
                        years = $oldDate.getFullYear();
                        months = $oldDate.getMonth()+1; /* 月份从0月开始 */
                        days = $oldDate.getDate()
                        if (years === currentYears) {
                            $interval = months + '月' + days +'日';
                        } else {
                            $interval = years +'年' + months + '月' + days +'日';
                        }
                    } else {
                        $interval = days + '天前';
                    }
                }
                return $interval;
            }


over


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值