解决toISOString()时区不准确的问题

4,117 阅读2分钟

toISOString()方法以简化的扩展ISO格式( ISO 8601 )返回字符串,该字符串始终为24或27个字符( YYYY-MM-DDTHH:mm:ss.sssZ或±YYYYYY-MM-DDTHH:mm:ss.sssZ )。 时区始终为零UTC偏移,如后缀“ Z ”所示。

所以转换成北京时间需要自己加8个时区,方案如下

解决方案

// 解决方式
const date = new Date(+new Date() + 8 * 3600 * 1000);
const currentMonth = date.toISOString().substr(0, 4) + date.toISOString().substr(5, 2);


// 最准确的方式:
var year=new Date().getFullYear();//年
if (year< 1900) year = year + 1900;
var month = new Date().getMonth() + 1;//月
if (month < 10) month = '0' + month;
var day = new Date().getDate();//日
if (day < 10) day = '0' + day;
var hour = new Date().getHours();//小时
if (hour < 10) hour = '0' + hour;
var minute = new Date().getMinutes();//分钟
if (minute < 10) minute = '0' + minute;
var second = new Date().getSeconds();//秒
if (second < 10) second = '0' + second;
var str=year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second;
console.log(str) // "2021-07-29 11:35:23"

什么是GMT

GMT(Greenwich Mean Time), 格林威治平时(也称格林威治时间)。

它规定太阳每天经过位于英国伦敦郊区的皇家格林威治天文台的时间为中午12点。

new Date()

// Wed Jul 28 2021 17:34:11 GMT+0800 (中国标准时间) {}

什么是UTC

UTC(Coodinated Universal Time),协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。

GMT vs UTC

GMT是前世界标准时,UTC是现世界标准时。

UTC 比 GMT更精准,以原子时计时,适应现代社会的精确计时。

但在不需要精确到秒的情况下,二者可以视为等同。

每年格林尼治天文台会发调时信息,基于UTC。

时区

从格林威治本初子午线起,经度每向东或者向西间隔15°,就划分一个时区,在这个区域内,大家使用同样的标准时间。

但实际上,为了照顾到行政上的方便,常将1个国家或1个省份划在一起。所以时区并不严格按南北直线来划分,而是按自然条件来划分。另外:由于目前,国际上并没有一个批准各国更改时区的机构。一些国家会由于特定原因改变自己的时区。

全球共分为24个标准时区,相邻时区的时间相差一个小时。