Date.getDay()返回不同的值

这个问题在这里已经有了答案:

  • 为什么Date.parse会提供不正确的结果? 10个答案

  • 当然,你的声明是1990-11-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)
    

    会发生什么情况是,构造函数根据所使用的语法采用本地时间或UTC:

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

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

    ...而你的语法使它成为UTC。 但许多其他方法假定当地时间:

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


    错误的是星期天返回的那个,而这一定是因为格式不正确。 1990-11-11被解释为UTC时间11日午夜00:00:00 ,这是您所在时区的第10次星期六下午5点。

    如果你使用getUTCDay() ,你应该在两个日期都得到0

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

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

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

    更新:新日期构造函数返回这些日期的不同时间值。

    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

    链接地址: http://www.djcxy.com/p/18615.html

    上一篇: Date.getDay() is returning different values

    下一篇: DD HH:MM:SS T