javascript时间与时间戳互转详解

javascript获取时间、时间戳等,最核心的就是利用Date关键词去获取。

一、javascript获取时间戳

时间戳的获取方式整理了5种方法,后4种是利用new Date()实例化对象来获取当前时间,再对当前获取的时间再进一步处理获取时间戳。下面获取的时间戳都是毫秒ms级别,如果要转换成秒s级别,可以在获取的结果除以1000即可。

方式一: Date.now()

Date.now()获取当前时间戳:

Date.now() // 1667960502653

方式二: getTime()

getTime()是通过原型方法直接获取当前时间戳:

new Date().getTime() // 1667961973698
new Date('2022-11-09 23:59:59').getTime() // 1668009599000

方式三: Date.parse()

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()

valueOf()返回指定对象的原始值获得准确的时间戳:

(new Date()).valueOf() // 1667962876782
(new Date('2022-11-09 23:59:59')).valueOf() // 1668009599000

方式五: Number()

Number()将时间对象转化成Number类型的时间戳:

Number(new Date()) // 1667962087928
Number(new Date('2022-11-09 23:59:59')) // 1668009599000

二、javascript时间戳转时间

时间戳转时间的应用场景还是比较常见的,一般在后端返回到前端的数据中可能是时间戳,在前端就需要转换成具体的时间展示,接下来整理几种时间戳转时间的方法及注意事项。

可以用new Date(时间戳)将时间戳转化成中国标准时间,示例:

new Date(1668009599000);

Wed Nov 09 2022 23:59:59 GMT+0800 (中国标准时间) 

注意:时间戳必须是Number类型,如果是字符串,解析结果:Invalid Date

如果后端直接返回时间戳给前端,前端如何转换呢?下面介绍2种实现方式:

方式一:生成’2022/11/9 23:59’格式

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

方式二:生成’yyyy-MM-dd hh:mm:ss’格式

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

后面还会扩展相关知识,敬请期待~

猜你喜欢

转载自blog.csdn.net/qq_42961150/article/details/127767234
今日推荐