学学笔记 - 官方 Qiter | 学习笔记

JavaScript 字符转时间戳

发布时间:2年前热度: 352 ℃评论数:

JavaScript 时间戳

1、JavaScript 的时间对象转换为时间戳

1.1、时间对象转时间戳的 5 种写法

1.2、获得当前时间的时间戳

1.3、获得 10 位数的时间戳

2、JavaScript 的时间戳转换为时间对象

3、总结

1、JavaScript 的时间对象转换为时间戳

1.1、时间对象转时间戳的 5 种写法

在 JavaScript 中,将时间对象转换为时间戳的方法有 5 种,示例如下:

// 定义一个时间对象 dt,然后依次演示各种将 dt 转换为时间戳的写法
var dt = new Date("2019-07-04 23:59:59.999");

// 写法一,精确到毫秒,得到 13 位时间戳 1562255999999
console.log(dt.getTime());

// 写法二,精确到毫秒,得到 13 位时间戳 1562255999999
console.log(dt.valueOf());

// 写法三,精确到毫秒,得到 13 位时间戳 1562255999999
console.log(Number(dt));

// 写法四,精确到毫秒,得到 13 位时间戳 1562255999999
console.log(+dt);

// 写法五,精确到秒,得到 13 位时间戳 1562255999000,后三位固定为 000
console.log(Date.parse(dt));

1.2、获得当前时间的时间戳

在 JavaScript 中,当前时间可用new Date()表示,再结合上文中时间对象转时间戳的写法,那么就能获得当前时间的时间戳了,示例如下:

new Date().getTime();   // 方法一
new Date().valueOf();   // 方法二
Date.parse(new Date()); // 方法三
Number(new Date());     // 方法四
+new Date();            // 方法五

1.3、获得 10 位数的时间戳
在 JavaScript 中,通过时间对象转换得到的时间戳都是 13 位的,但有时候我们也需要精确到秒的 10 位时间戳,比如微信支付用的就是 10 位的时间戳。要在 JavaScript 获得 10 位的时间戳,大致思路有两个,要么截取前 10 位,要么除以 1000。示例如下:

// 将 13 位时间戳除以 1000 然后再取整,得到 10 位时间戳数字
parseInt(+new Date()/1000);

// 将 13 位时间戳转换为字符串截取前 10 位,得到 10 位时间戳字符串
(+new Date()).toString().substring(0,10); // 截取第 0~9 位
(+new Date()).toString().substr(0,10);    // 从第 0 位开始截取 10 位
2、JavaScript 的时间戳转换为时间对象
在 JavaScript 中,时间戳转时间对象的方法非常简单,直接将一个时间戳做为Date的参数即可,示例如下:

// 注意:参数中的时间戳必须是 13 位的,多一位或少一位都不行
new Date(1562169599000);

// 将时间戳转换为更加直观形象的本地时间
new Date(1562169599000).toLocaleString();

3、获取30天以前的时间戳

let t = new Date();
t.setDate(t.getDate()-30);
//精确到秒时间戳
Date.parse(t.toLocaleDateString().toString() +" 6:00:00")/1000;

时间戳(timestamp)

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
java的date默认精度是毫秒,也就是说生成的时间戳就是13位的,而像c++或者php生成的时间戳默认就是10位的,因为其精度是秒。

问题1:为什么会生成13位的时间戳,13位的时间戳和10时间戳分别是怎么来的

date默认精度是毫秒,也就是说生成的时间戳就是13位的,有的时间戳默认就是10位的,因为其精度是秒。
问题2:13位时间戳如何转换成10位时间戳
第一种:通过substring方法,将13位的时间戳最后三位数字截取
第二种:将13位时间戳除以1000取整。

北京时间:2021-11-18 22:14:24
时间戳:1637244864707 (毫秒) Math.round(new Date())
时间戳:1637244864 (秒)      Math.round(new Date() / 1000)`
1. 时间戳转换为时间
// 时间戳:1637244864707
/* 时间戳转换为时间 */
  timestampToTime(timestamp) {
    timestamp = timestamp ? timestamp : null;
    let date = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
    let Y = date.getFullYear() + '-';
    let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
    let D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
    let h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
    let m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
    let s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
    return Y + M + D + h + m + s;
  }
  1. 时间转换为时间戳
    // 北京时间:2021-11-18 22:14:24
    /* 时间yyyy-MM-dd HH:mm:ss转为时间戳 */
    timeToTimestamp(time){
     let timestamp = Date.parse(new Date(time).toString());
     //timestamp = timestamp / 1000; //时间戳为13位需除1000,时间戳为13位的话不需除1000
     console.log(time + "的时间戳为:" + timestamp);
     return timestamp;
     //2021-11-18 22:14:24的时间戳为:1637244864707
    }
    
    Date.parse()分析一个包含日期的字符串,函数的返回值为Number类型,返回该字符串所表示的日期与 1970 年 1 月 1 日午夜之间相差的毫秒数。

时间字符串转换为时间

let str = '2021年12月10日 09:27';
let replacedStr = str.replace('年', '-').replace('月', '-').replace('日', '');
console.log(replacedStr); //2021-12-10 09:27
let parsedDate = new Date(replacedStr);
console.log(parsedDate); //Fri Dec 10 2021 09:27:00 GMT+0800 (中国标准时间)

Fri Dec 10 2021 09:27:00 GMT+0800 (中国标准时间)
2021-12-10 09:27

时间yyyy-MM-dd HH:mm: ss的含义
字段 说明
yyyy或YYYY 年:注意这个大小写是不同的!!!y 是Year, Y 表示的是Week year。 经过试验,得出的结果如下:Week year 意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。
MM 月:M大写是为了区分“月”与“分”
dd 日:必须小写,大写有时会出现本文上面出现的诡异bug
HH或hh或H 时:大小写不同!!!小写的h是12小时制,大写的H是24小时制。HH和H区别在于是否有前导0
mm或者m 分:mm与m的区别为是否有前导零
ss或者s 秒:ss和s的区别为是否有前导零
”前导0” 比如凌晨1点2分,HH:mm显示为01:02,H:m显示为1:2

JavaScript 字符转时间戳 时间戳转字符

栏目导航

  1. JavaScript
  2. Uni-APP
  3. CSS

相关文章

  1. JavaScript 字符转时间戳 352 ℃

手机扫码访问