javascript获取时间、时间戳等,最核心的就是利用Date
关键词去获取。
时间戳的获取方式整理了5种方法,后4种是利用new Date()
实例化对象来获取当前时间,再对当前获取的时间再进一步处理获取时间戳。下面获取的时间戳都是毫秒ms
级别,如果要转换成秒s
级别,可以在获取的结果除以1000即可。
Date.now()获取当前时间戳:
Date.now() // 1667960502653
getTime()是通过原型方法直接获取当前时间戳:
new Date().getTime() // 1667961973698
new Date('2022-11-09 23:59:59').getTime() // 1668009599000
Date.parse()将字符串或者时间对象直接转化成时间戳:
Date.parse(new Date()) // 1667960585000
Date.parse(new Date('2022-11-09 12:00:00')) // 1667966400000
Date.parse('2022-11-09 23:59:59') // 1667966400000
注意:该方式将毫秒级别的数值被转化为000,如果是用秒级别的时间戳且不保留小数的可以使用该方式,如果精确到毫秒级别,不推荐使用。
valueOf()返回指定对象的原始值获得准确的时间戳:
(new Date()).valueOf() // 1667962876782
(new Date('2022-11-09 23:59:59')).valueOf() // 1668009599000
Number()将时间对象转化成Number类型的时间戳:
Number(new Date()) // 1667962087928
Number(new Date('2022-11-09 23:59:59')) // 1668009599000
时间戳转时间的应用场景还是比较常见的,一般在后端返回到前端的数据中可能是时间戳,在前端就需要转换成具体的时间展示,接下来整理几种时间戳转时间的方法及注意事项。
可以用new Date(时间戳)
将时间戳转化成中国标准时间,示例:
new Date(1668009599000);
Wed Nov 09 2022 23:59:59 GMT+0800 (中国标准时间)
注意:时间戳必须是Number类型,如果是字符串,解析结果:Invalid Date
如果后端直接返回时间戳给前端,前端如何转换呢?下面介绍2种实现方式:
function getLocalTime(n) {
return new Date(parseInt(n)).toLocaleString().replace(/:\d{1,2}$/,' ');
}
getLocalTime(1668009599000); 2022/11/9 23:59
也可以使用字符串截取的方法,想取几位就几位,注意:空格也算:
function getLocalTime(n) {
return new Date(parseInt(n)).toLocaleString().substr(0,16)
}
getLocalTime(1668009599000); 2022/11/9 23:59
使用正则表达式的方式:
function getLocalTime(n) {
return new Date(parseInt(n)).toLocaleString().replace(/年|月/g, "-").replace(/日/g, " ");
}
getLocalTime(1668009599000); 2022/11/9 23:59:59
function getDate(n){
n=new Date(n);
return n.toLocaleDateString().replace(/\//g, "-") + " " + n.toTimeString().substr(0, 8);
}
getDate(1668009599000); 2022-11-9 23:59:59
这种方式在浏览器上面有兼容性问题,toLocaleDateString()方法是因浏览器而异,比如IE为"2016年8月24日 22:26:19"格式 ;搜狗为"Wednesday, August 24, 2016 22:39:42"
可以用以下方式拥有更好的兼容:
function getData(n) {
let now = new Date(n),
y = now.getFullYear(),
m = now.getMonth() + 1,
d = now.getDate();
return y + "-" + (m < 10 ? "0" + m : m) + "-" + (d < 10 ? "0" + d : d) + " " + now.toTimeString().substr(0, 8);
}
getDate(1668009599000); 2022-11-09 23:59:59
…
后面还会扩展相关知识,敬请期待~