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
}