js时间戳和日期格式互转

预备知识

  • 知道什么是时间戳:即距离1970年01月01日00时00分00秒的毫秒数(如果你要用到的是秒,那也行,单位问题而已)。
  • 知道为什么需要把日期转化成时间戳:对于前端来说,接触的到的时间多是2018-08-08这种形式的,但是在拉取后端数据时,一般要把时间转化成时间戳再传过去。同样的道理要会把时间戳转化成我们想要的日期格式。

时间 -> 时间戳 (2018/08/09 10:10:10 -> 1533780610000 )

通常我们用到的时间格式分两种2018/08/09 10:10:10或者2018-08-09 10:10:10,幸运的是js的Date对象很好的支持了这种格式的时间,通常我们可以通过

new Date('2018/08/09 10:10:10').getTime()或者
new Date('2018-08-09 10:10:10').getTime()来获取到时间戳

但是!!!!
ie对于第二种不支持 
如下图:

因此,请采用以下的代码

let time = '2018-08-09 10:10:10'
time = time.replace(/-/g, '/') // 把所有-转化成/
let timestamp = new Date(time).getTime() 

时间戳 -> 时间 (1533780610000 -> 2018/08/09 10:10:10)

这里要用到Date对象的一系列get方法,思路是先根据时间戳new一个Date对象,然后通过一系列get方法分别拿到年月日时分秒,再拼接字符串。

//转换年月日方法
function timestampToTime(format,str){  
    var oDate = new Date(str),  
    oYear = oDate.getFullYear(),  
    oMonth = oDate.getMonth()+1,  
    oDay = oDate.getDate(),  
    oHour = oDate.getHours(),  
    oMin = oDate.getMinutes(),  
    oSec = oDate.getSeconds(),  
    if(format == 'yyyy-mm-dd'){
   	    oTime = oYear +'-'+ getzf(oMonth) +'-'+ getzf(oDay) +' '+ getzf(oHour) +':'+ getzf(oMin) +':'+getzf(oSec);//最后拼接时间
    }else if(format == 'yyyy/mm/dd'){
    	oTime = oYear +'/'+ getzf(oMonth) +'/'+ getzf(oDay) +' '+ getzf(oHour) +':'+ getzf(oMin) +':'+getzf(oSec);//最后拼接时间
    }
    return oTime;  
 };
 //补0操作  
 function getzf(num){  
     if(parseInt(num) < 10){  
         num = '0'+num;  
     }  
     return num;  
 }

timestampToTime(1533773345000)
timestampToTime(1533780610000)

总结

有几个小点需要注意

  • 为了兼容,将横线换成斜杠(2018-08-09 10:10:10 => 2018/08/09 10:10:10);
  • 获取月份时,要加1;
  • getDate获取日期,getDay是用来获取是一个星期的第几天;
  • 根据需求做适当的补0,2018-8-9 08:09:05 要比 2018-8-9 8:9:5好看的多;
  • 在把后台返回的时间戳转为页面上显示的具体日期时,要特别注意时间戳的单位是以秒为单位还是毫秒为单位,本示例默认以毫秒为单位。

猜你喜欢

转载自blog.csdn.net/qappleh/article/details/89314943