为什么我无法在 Javascript Date 对象上使用 getDay() 方法和 getUTCDay() 方法获得相同的结果

Ben*_*ent 2 javascript date utc node.js typescript

今天是星期一,上午 00:51 我来自魁北克市,因此我的时间为 GMT-0500 (UTC\xe2\x88\x9205:00)

\n\n

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

\n\n
const weekday = Array(\'sunday\', \'monday\', \'tuesday\', \'wednesday\', \n                      \'thursday\', \'friday\', \'saturday\');\n\nconsole.log(\'getDay() =\', weekday[new Date(\'2019-02-18\').getDay()]); \n  // getDay() = sunday\n\nconsole.log(\'getUTCDay() =\', weekday[new Date(\'2019-02-18\').getUTCDay()]); \n  // getUTCDay() = monday\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 MDN 网站上,他们说 getDay() 方法根据当地时间返回指定日期的星期几,其中 0 代表星期日。

\n\n

他们说的完全一样 getUTCDay() 方法根据通用时间返回指定日期中的星期几,其中 0 代表星期日。

\n\n

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

\n\n

我不确定我应该验证什么来理解我在 Node.js (Typescript)和控制台Chrome DevTools (Javascript)中尝试的差异

\n\n

在我的电脑设置中,一周的第一天是星期日...

\n

Bri*_*ams 5

new Date(string)用于Date.parse()解析日期。

来自Date.parse() 文档

当时区偏移量不存在时,仅日期形式将解释为 UTC 时间,而日期时间形式将解释为本地时间。

因此,创建的日期new Date('2019-02-18')将恰好是UTC 时间2019 年 2 月 18 日午夜。

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

因此,如果您所在的时区偏移量为负,则周日.getDay()正确返回0,而周一.getUTCDay()正确返回。1