Date.getDay()返回不同的值

mat*_*vio 6 javascript date

我觉得我在这里错过了一些东西.

Date.getDay()方法应该返回0-6之间的值.星期日为0,星期六为6.

现在我有两个日期,两个都是'星期日',应该返回0.

new Date('1990-11-11').getDay() // returns 6 
new Date('2016-1-3').getDay() // returns 0
Run Code Online (Sandbox Code Playgroud)

造成这种差异的原因是什么?我敢问这个.getDay()方法的有效性,但我无法弄清楚发生了什么.

编辑

> new Date('1990-11-11')
Sat Nov 10 1990 17:00:00 GMT-0700 (MST)
> new Date('2016-01-03')
Sat Jan 02 2016 17:00:00 GMT-0700 (MST)
> new Date('2016-1-3')    // they say this format is wrong, but it returns the right date
Sun Jan 03 2016 00:00:00 GMT-0700 (MST)
Run Code Online (Sandbox Code Playgroud)

我不明白发生了什么.1月3日是星期日,1990年11月11日是星期日.为什么周六说?

Álv*_*lez 2

当然,你所说的1990-11-11周日是正确的,但你必须理解 JavaScriptDate对象:

  • 处理时间和日期
  • 是否知道时区
  • 设计不佳且相当违反直觉

您自己的测试说明了这一点:

new Date('1990-11-11').getDay() // returns 6 
> new Date('1990-11-11')
Sat Nov 10 1990 17:00:00 GMT-0700 (MST)
Run Code Online (Sandbox Code Playgroud)

所发生的情况是,构造函数根据所使用的语法假定本地时间或 UTC

注意:当 Date 被作为具有多个参数的构造函数调用时,指定的参数表示本地时间。如果需要 UTC,请使用具有相同参数的 new Date(Date.UTC(...)) 。

注意:由于浏览器差异和不一致,强烈建议不要使用 Date 构造函数(和 Date.parse,它们是等效的)解析日期字符串。对 RFC 2822 格式字符串的支持只是按照惯例。对 ISO 8601 格式的支持的不同之处在于,仅日期字符串(例如“1970-01-01”)被视为 UTC,而不是本地。

...并且您的语法使其成为 UTC。但许多其他方法假定当地时间:

getDay() 方法根据当地时间返回指定日期是星期几,其中 0 表示星期日。