Javascript时区gmt和偏移量

Javascript时区gmt和偏移量,javascript,timezone,timezone-offset,Javascript,Timezone,Timezone Offset,关于Javascript日期类,我已经读了很多关于UTC/GMT和时区的内容。但有一点我不明白: const date = new Date('August 19, 1975 23:15:30 GMT+04:00'); const offset = date.getTimezoneOffset() 我认为“GMT+0400”表示我当前的日期比UTC时间早4小时。因此UTC将是“1975年8月19日19:15:30” 为什么“偏移量”不是-4?“getTimezoneOffset”是否使用浏览器

关于Javascript日期类,我已经读了很多关于UTC/GMT和时区的内容。但有一点我不明白:

const date = new Date('August 19, 1975 23:15:30 GMT+04:00');
const offset = date.getTimezoneOffset()
我认为“GMT+0400”表示我当前的日期比UTC时间早4小时。因此UTC将是“1975年8月19日19:15:30”

为什么“偏移量”不是-4?“getTimezoneOffset”是否使用浏览器的区域设置?如果是,是否可以在特定时区中创建日期

我认为“GMT+0400”表示我当前的日期比UTC时间早4小时

GMT+0400
表示字符串中的文本以GMT+0400表示。但是JavaScript日期实例不允许您指定它们使用的时区。它们使用从1970年1月1日午夜UTC开始的毫秒偏移量,并提供函数来访问它们所代表的时间部分,或者以相对于代码运行的系统时区的单位(
getDate
getHours
)表示,或者以相对于UTC的单位表示(
getUTCDate
getUTCHours
)。
getTimezoneOffset
告诉您它们之间的区别

因此,尽管您指定要解析的日期的文本以GMT+0400表示,但实例用于本地时间函数的时区始终是本地时区

下面是一个例子:两个字符串在不同的时区中表示,但会产生等效的
Date
实例:

const s1=“2020-08-31 12:30:00-0300”;
const s2=“2020-08-31 20:30:00+0500”;
常数d1=新日期(s1);
const d2=新日期(s2);
log(`s1=${s1}`);
log(`d1=${d1.toString()}`);
log(`s2=${s2}`);
log(`d2=${d2.toString()}`);
console.log(`d1和d2等效?${d1.getTime()===d2.getTime()}`);
我认为“GMT+0400”表示我当前的日期比UTC时间早4小时

GMT+0400
声明字符串中的文本以GMT+0400表示。但是JavaScript日期实例不允许您指定它们使用的时区。它们使用从1970年1月1日UTC午夜开始的毫秒偏移量,并提供函数来访问它们以un或un表示的时间部分它相对于代码运行的系统时区(
getDate
getHours
,等等)或相对于UTC的单位(
getUTCDate
getUTCHours
)。
getTimezoneOffset
告诉您它们之间的区别

因此,尽管您指定要解析的日期的文本以GMT+0400表示,但实例用于本地时间函数的时区始终是本地时区

下面是一个例子:两个字符串在不同的时区中表示,但会产生等效的
Date
实例:

const s1=“2020-08-31 12:30:00-0300”;
const s2=“2020-08-31 20:30:00+0500”;
常数d1=新日期(s1);
const d2=新日期(s2);
log(`s1=${s1}`);
log(`d1=${d1.toString()}`);
log(`s2=${s2}`);
log(`d2=${d2.toString()}`);
console.log(`d1和d2等效?${d1.getTime()===d2.getTime()}`);