为什么在Javascript日期对象上使用getDay()方法和getUTCDay()方法不能得到相同的结果

为什么在Javascript日期对象上使用getDay()方法和getUTCDay()方法不能得到相同的结果,javascript,node.js,typescript,date,utc,Javascript,Node.js,Typescript,Date,Utc,今天是星期一,时间是凌晨00:51,我来自魁北克市,因此我在格林尼治标准时间0500−05:00 我不知道为什么下面的代码会给我两个不同的结果: const weekday = Array('sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'); console.log('getDay() =', weekday[new Date('2019-02-

今天是星期一,时间是凌晨00:51,我来自魁北克市,因此我在格林尼治标准时间0500−05:00

我不知道为什么下面的代码会给我两个不同的结果:

const weekday = Array('sunday', 'monday', 'tuesday', 'wednesday', 
                      'thursday', 'friday', 'saturday');

console.log('getDay() =', weekday[new Date('2019-02-18').getDay()]); 
  // getDay() = sunday

console.log('getUTCDay() =', weekday[new Date('2019-02-18').getUTCDay()]); 
  // getUTCDay() = monday
在MDN网站上,他们说getDay方法根据本地时间返回指定日期的星期几,其中0表示星期天

他们说,对于getUTCDay,情况完全相同。根据世界时间,getUTCDay方法返回指定日期中的一周中的某一天,其中0表示星期日

唯一的区别是一个是根据当地时间,另一个是根据世界时间

我不确定我应该验证什么来理解我在控制台中和在控制台中尝试的差异

在我的计算机设置中,一周的第一天是星期天…

新的日期字符串使用Date.parse解析日期

从Date.parse开始:

如果没有时区偏移,则仅日期表单将解释为UTC时间,日期时间表单将解释为本地时间

因此,新日期“2019-02-18”创建的日期正好是UTC时间2019年2月18日午夜

如果您所在的时区偏移量为负,则该日期实际上是当地时间星期日魁北克市为GMT-0500,因此该日期为当地时间2019-02-17:19:00:00


因此,如果您所在的时区偏移量为负,那么.getDay正确地返回0表示星期天,而.getUTCDay正确地返回1表示星期一。

它在两个日志上都给出星期一作为结果。尽管一般建议是不要使用内置解析器。ECMAScript在这个日期上很奇怪——只有ISO 8601格式日期的格式被视为UTC,而在其他任何地方,它们都被视为本地格式,包括HTML格式。