需求:
当后台转入一个毫秒时间此时我们要进行如下格式转换:
1分钟前,显示"刚刚"
1分钟~1小时之间,显示"XX分钟前"
1小时~1天之间,显示"xxx小时前"
1天~ 1一个月(31天)之间,显示"xx天前"
大于1个月,显示"xx年XX月xx日"
代码如下:
var Time={
//获取当前时间戳
getUnix(){
var date=new Date();
return date.getTime();
},
//获取今天 0点0分0秒的时间戳
getTodayUnix(){
var date=new Date();
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
return date.getTime();
},
//获取今年一月一日 0点0分0秒的时间戳
getYearUnix(){
var date=new Date();
date.setMonth(0);
date.setDate(1);
date.setHours(0);
date.setMinutes(0);
date.setMilliseconds(0);
return date.getTime();
},
//标准时间转换补丁
padDate(time){
return time<10?'0'+time:time;
},
// 获取标准年月日
getLastDate(time){
var date=new Date(time);
var month=this.padDate(date.getMonth()+1);
var day=this.padDate(date.getDate());
return date.getFullYear()+'-'+month+'-'+day;
},
//转换时间 传入毫秒级的时间戳
getFormatTime(timestamp){
var now=this.getUnix(); //当前时间戳
var today=this.getTodayUnix(); //今天0点时间戳
var timer=(now-timestamp)/1000;// 转换为秒级时间戳
var tip="";
if(timer<=0){
tip="刚刚";
}else if(Math.floor(timer/60)<=0){
tip="刚刚";
}else if(timer<3600){
tip=Math.floor(timer/60)+'分钟前';
}else if(timer>=3600 && (timestamp-today)>=0){
tip=Math.floor(timer/3600)+'小时前';
}else if(timer/86400<=31){
tip=Math.ceil(timer/86400)+'天前';
}else{
tip=this.getLastDate(timestamp);
}
return tip;
}
}
测试:
var year=Time.getYearUnix(); //获取今天1月1日的时间戳
console.log(Time.getLastDate(year)); //显示年月日
console.log(Time.getFormatTime(year)); //显示年月日
console.log(Time.getFormatTime(1540019762858)); //放入一个毫秒级时间
let time=new Date().getTime();
console.log(Time.getFormatTime(time)); //'显示刚刚'
利用该时间转换对象可以扩展设置一个自定义指令(在vue.js中):
Vue.directive('time',{
bind(el,binding){
el.innerHTML=Time.getFormatTime(binding.value);
el.__timeout__=setInterval(function(){
el.innerHTML=Time.getFormatTime(binding.value);
},60000);
},
unbind(){
clearInterval(el.__timeout__);
delete el.__timeout__;
}
});