消息推送需要显示消息时间和当前时间的差值,显示消息的相对时间状态,比如:“刚刚”这种。
真实项目当中,应当获取服务器返回时间,保证信息和服务器的时间保持一致。本次为个人兴趣玩玩。
因为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