10位时间戳、13位时间戳以及17位时间戳在JS中的格式转换

目录

一、介绍

1、10位时间戳

10位时间戳通常指的是Unix时间戳的一种表示形式,它表示从1970年1月1日00:00:00 UTC(协调世界时)到某个特定时间点的秒数。与常见的13位时间戳(毫秒级时间戳)不同,10位时间戳只精确到秒。
10位时间戳是一种常见的时间表示方式,因其简单、易用、兼容性好,在软件开发和网络应用中被广泛使用。

2、13位时间戳

‌13位时间戳是指自1970年1月1日00:00:00 UTC(协调世界时)以来的总毫秒数‌。这种时间戳以毫秒为单位进行表示,提供了比10位时间戳(以秒为单位)更高的时间精度,因此在需要高精度时间记录和分析的场景中尤为有用‌。13位时间戳在软件开发、网络应用、数据库记录等多个领域都有广泛应用,如记录事件发生时间、版本控制、日志记录等‌。

3、17位时间戳

17位时间戳表示的是自‌1601年1月1日00:00:00 GMT(格林威治时间)‌以来的总微秒数‌。这种时间戳提供了极高的时间精度,能够精确到微秒级别。
‌应用场景‌:尽管17位时间戳并不常见,但在某些特定领域,如Chrome、Edge、Firefox等浏览器的本地数据库文件中,有关时间的字段可能会采用这种时间戳格式来记录精确的时间信息‌。
‌ 与常见时间戳的区别‌:与10位和13位时间戳相比,17位时间戳提供了更高的时间精度。10位时间戳表示的是自1970年1月1日以来的总秒数,而13位时间戳则表示的是自同一时间点以来的总毫秒数。相比之下,17位时间戳能够更精确地反映时间的变化‌。

二、13位时间戳的转换

1、获取当前时间的13位时间戳

13位时间戳表示自1970年1月1日00:00:00的总毫秒数;
下面是在JavaScript中,获取当前时间的13位时间戳(以毫秒为单位)的方法

// 创建一个新的Date对象,表示当前时间
var now = new Date();

// 使用getTime()方法获取13位时间戳
var timestamp = now.getTime();

// 输出时间戳(返回自1970年1月1日00:00:00 UTC以来的毫秒数)
console.log(timestamp);

2、转换成标准日期

使用JavaScript中的Date对象,可以将13位的时间戳转换为标准日期;
只需在创建Date对象时传入需要转换的13位时间戳即可;

//以1733910420147时间戳为例
new Date(1733910420147)

3、转换成格式化日期

使用该方法可以将13位的时间戳转换成 yyyy-MM-dd HH:mm:ss 格式的日期字符串;

// 13位时间戳的格式化,以1733910420147为例
console.log("格式化13位时间戳1733910420147:", formatTimeStamp(1733910420147));

function formatTimeStamp(timeStamp) {
    let date = new Date(timeStamp);
    let year = date.getFullYear();
    let month = date.getMonth() + 1;
    let day = date.getDate();
    let hour = date.getHours();
    let minute = date.getMinutes();
    let second = date.getSeconds();
 
    month = month < 10 ? "0" + month : month;
    day = day < 10 ? "0" + day : day;
    hour = hour < 10 ? "0" + hour : hour;
    minute = minute < 10 ? "0" + minute : minute;
    second = second < 10 ? "0" + second : second;
 
    return `${year}-${month}-${day} ${hour}:${minute}:${second}`;;
}

三、10位时间戳的转换

1、获取当前时间的10位时间戳

在JavaScript中,获取当前时间的10位时间戳(以秒为单位)需要将毫秒数转换为秒数。你可以使用Math.floor()函数来对毫秒数进行整除,从而得到秒数。以下是一个示例代码:

// 获取当前时间的毫秒数(13位时间戳)
var milliseconds = Date.now();

// 将毫秒数转换为秒数(10位时间戳)
var timestampInSeconds = Math.floor(milliseconds / 1000);

// 输出10位时间戳
console.log(timestampInSeconds);

2、转换成标准日期

10位时间戳表示自1970年1月1日00:00:00的总秒数;
只需给10位时间戳 * 1000 转成13位时间戳,其他按照13位时间戳的处理方式就可以了;

// 以 1733911274时间戳为例
new Date(1733911274* 1000);

3、转换成格式化日期

注意:这里使用的是上面13位时间戳的转换方法,只需注意传入的参数即可;

// 13位时间戳的格式化,以1733910420147为例
console.log("格式化13位时间戳1733910420147:", formatTimeStamp(1733910420147));
 
// 10位时间戳的格式化,以1733911274为例
console.log("格式化10位时间戳1733911274:", formatTimeStamp(1733911274* 1000));

四、17位时间戳的转换

17位的时间戳在解析上比较麻烦,JavaScript中的Date对象只能用来处理13位的时间戳,所以需要先将17位时间戳的换成13位时间戳的表示规则,再进行解析,这里不做详解

完整代码(代码来源

// 13363929430000000   1719455830   2024年6月27日星期四上午10点37分 GMT+08:00
 
// 格式化17位时间戳13363929430000000: 2024-06-27 10:31:27
console.log("格式化17位时间戳13363929430000000:", format17TimeStamp(13363929430000000));    
 
function format17TimeStamp(timeStamp){
    let epoch_start = new Date("1601-1-1 00:00:00:000");    
    console.log(epoch_start.getTime());   // "1601-1-1 00:00:00"的毫秒数:-11644502743000
 
    let epoch_end = new Date("1970-1-1 00:00:00:000");      
    console.log(epoch_end.getTime());   // "1970-1-1 00:00:00"的毫秒数:-28800000
 
    let epoch = (epoch_end.getTime() - epoch_start.getTime());      
    console.log(epoch);      // 相差epoch: 11644473943000 毫秒
 
    let timeStamp14 = Math.floor(timeStamp / 1000);     // timeStamp14: 13363929430000
    console.log("timeStamp14:", timeStamp14);
 
    let ms = timeStamp14 - epoch;   // ms: 1719455487000
    console.log("ms:", ms);
    
    let date = new Date(ms);        // date: Thu Jun 27 2024 10:31:27 GMT+0800 (中国标准时间)
    console.log("date:", date);
 
    return formatTimeStamp(date);   // 2024-06-27 10:31:27
}
posted @ 2024-12-11 18:16  桃桃布丁  阅读(115)  评论(0编辑  收藏  举报