知食记
搜索文档…
时间戳与时区

什么是时间戳

时间戳 指的就是Unix时间戳(Unix timestamp)。它也被称为Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数
时间戳 在地球的每一个角落都是相同的, 可以尝试修改不同时区查看下面代码结果
1
console.log(Date.now());
Copied!
结果都是一样的

什么是时区

时区 是指相同的时间在不同的地区有不同的含义, 我们所处的时区为 东八区, 可以在设备的时间设置中手动调整时区
同一时间戳在不同时区所表示的日期是不同的, 比如下面的代码
1
const time = new Date(1556074515196);
2
console.log(time.getFullYear());
3
console.log(time.getMonth());
4
console.log(time.getDate());
Copied!
在北京时间执行的结果为 2019 3 24, 而在美国时间执行的结果却是 2019 3 23

产生的问题

有这样一个场景, 接口返回了某演出的开演时间string和相应的时间戳, string是按服务端按东八区计算的结果, 然后端上会用时间戳展示一个日历组件, 结果导致用户选择了15号的日期, 实际演出却是16号的, 造成客诉

如何解决问题

定义了如下方法用于转换时区, 使其得到的结果与服务端一致
1
/**
2
* 把指定时区的时间换算到当地时区
3
* @param {number} timestamp 指定的时间戳
4
* @param {number} timeZone 指定时间戳的时区,
5
* @returns {number} 系统时区的时间
6
*/
7
function transformToLocalTime(timestamp, timeZone = -8) {
8
const date = new Date();
9
const zone = date.getTimezoneOffset() / 60;
10
const zoneGap = zone - timeZone;
11
timestamp += (zoneGap * 60 * 60 * 1000);
12
return timestamp;
13
}
Copied!
最近更新 1yr ago