• javascript时间与时间戳互转详解


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

    一、javascript获取时间戳

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

    方式一: Date.now()

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

    Date.now() // 1667960502653
    
    • 1
    方式二: getTime()

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

    new Date().getTime() // 1667961973698
    new Date('2022-11-09 23:59:59').getTime() // 1668009599000
    
    • 1
    • 2
    方式三: 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
    
    • 1
    • 2
    • 3

    注意:该方式将毫秒级别的数值被转化为000,如果是用秒级别的时间戳且不保留小数的可以使用该方式,如果精确到毫秒级别,不推荐使用。

    方式四: valueOf()

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

    (new Date()).valueOf() // 1667962876782
    (new Date('2022-11-09 23:59:59')).valueOf() // 1668009599000
    
    • 1
    • 2
    方式五: Number()

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

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

    二、javascript时间戳转时间

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

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

    new Date(1668009599000);
    
    Wed Nov 09 2022 23:59:59 GMT+0800 (中国标准时间) 
    
    • 1
    • 2
    • 3

    注意:时间戳必须是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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    也可以使用字符串截取的方法,想取几位就几位,注意:空格也算:

    function getLocalTime(n) {   
    	return new Date(parseInt(n)).toLocaleString().substr(0,16)
    }
    
    getLocalTime(1668009599000);  2022/11/9 23:59
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用正则表达式的方式:

    function getLocalTime(n) {   
    	return new Date(parseInt(n)).toLocaleString().replace(/年|月/g, "-").replace(/日/g, " ");
    }
    
    getLocalTime(1668009599000);  2022/11/9 23:59:59
    
    • 1
    • 2
    • 3
    • 4
    • 5
    方式二:生成’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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这种方式在浏览器上面有兼容性问题,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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

  • 相关阅读:
    JavaScript 基础语法
    2022年SQL经典面试题总结(带解析)
    Tower for Mac:Git管理的新境界
    归并排序与计数排序
    ansible自动化管理工具
    盘点Vue2和Vue3的10种组件通信方式(值得收藏)
    HTML5七夕情人节表白网页制作【一生守护】HTML+CSS+JavaScript
    LTV预测算法从开发到上线,浅谈基于奇点云DataSimba的MLOps实践
    JVM后端编译与优化——编译器优化技术
    开源转闭源后,法院判定:分支使用“100%开源”是虚假宣传
  • 原文地址:https://blog.csdn.net/qq_42961150/article/details/127767234