预备知识
- 知道什么是时间戳:即距离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
好看的多; - 在把后台返回的时间戳转为页面上显示的具体日期时,要特别注意时间戳的单位是以秒为单位还是毫秒为单位,本示例默认以毫秒为单位。