我觉得我在这里错过了一些东西。
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日是星期日。为什么要说星期六?
答案 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