Date.getDay()返回不同的值

时间:2016-12-28 09:16:10

标签: 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

造成这种差异的原因是什么?我敢于质疑.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)

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

3 个答案:

答案 0 :(得分:3)

错误的是周日返回的那个,那必须是因为格式不正确。 {11}午夜将1990-11-11解释为00:00:00,即您所在时区10日星期六下午5点。

如果您使用getUTCDay(),则两个日期都应获得0

new Date('1990-11-11').getUTCDay() // returns 0
new Date('2016-01-03').getUTCDay() // returns 0

答案 1 :(得分:1)

当然,您声称1990-11-11是星期日的说法属实,但您必须了解JavaScript Date对象:

  • 处理时间和日期
  • 是时区感知
  • 设计不佳而且反直觉

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

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

constructor assumes local time or UTC depending on the syntax used

会发生什么
  

注意:Date被称为具有多个构造函数的构造函数   参数,指定的参数代表当地时间。如果是UTC   期望的,使用具有相同参数的新日期(Date.UTC(...))。

  

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

...并且您的语法使其成为UTC。但many others methods假设当地时间:

  

getDay()方法返回指定日期的星期几   根据当地时间,0代表星期日。

答案 2 :(得分:0)

getDay返回日期索引(从0到6),其中0是星期日。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay

返回值: 对应于给定日期的星期几的整数,根据当地时间:0表示星期日,1表示星期一,2表示星期二,依此类推。

<强>更新 new Date构造函数返回这些日期的不同时间值。

new Date('2016-1-3') ==> Sun Jan 03 2016 00:00:00 GMT+0100 (CET)

new Date('1990-11-11') ==> Sun Nov 11 1990 01:00:00 GMT+0100 (CET)

由于某种原因,第一个在你的机器上被解释为星期六。 很抱歉无法提供更多帮助

<强> UPDATE2:

使用两位数的月/日应该标准化结果。 例如:

(new Date('2016-01-03')).getDay() ==> 0

getDay