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问题,因此将上述函数修改成为计算结果向下取整。
再次对原文作者表示感谢。