【问题标题】:Javascript Date() function, abnormalities [duplicate]Javascript Date()函数,异常[重复]
【发布时间】:2015-08-27 15:05:00
【问题描述】:

我最近遇到了 javascript 中日期不可靠的问题。

这是一个示例,您可以在自己的浏览器控制台中进行测试,以重现问题。

s = new Date(0); s.setYear(2015); s
//Thu Dec 31 2015 18:00:00 GMT-0600 (Central Standard Time)

s.setMonth(5); s
//Wed Jul 01 2015 18:00:00 GMT-0500 (Central Daylight Time)

s.setMonth(6); s
//Wed Jul 01 2015 18:00:00 GMT-0500 (Central Daylight Time)

如您所见,设置月份 5(六月)与 6(七月)相同,都返回七月。 这可以通过使用 --new Date() 而不是 new Date(0) 来解决。

我只是想了解为什么会这样。 重申,想了解WHY。 谁能描述这种行为?

https://wordpress.org/support/topic/front-end-submit-events-off-by-1month?replies=5#post-7059058

【问题讨论】:

    标签: javascript date momentjs epoch


    【解决方案1】:
    • 最初的日期是 2015 年 12 月 31 日
    • s.setMonth(5) 将月份设置为 6 月(月份为零索引),因此您将日期设置为 2015 年 6 月 31 日
    • 没有这样的日期(即 6 月有 30 天),因此它会滚动到 2015 年 7 月 1 日
    • 使用 s.setMonth(6) 将月份设置为 7 月没有任何作用,因为日期已经在 7 月。

    new Date() 使用当前日期(今天不是 31 日),因此不会发生这种 31 比 1 的翻转。

    【讨论】:

    • 完美,这就是我想要理解的。谢谢!
    【解决方案2】:

    这里讨论了问题的原因:javascript new Date(0) class shows 16 hours?

    所以,在你的情况下,不要在 Date() 中传递 0;

    var s = new Date(); s.setYear(2015);
    
    document.write(s);
    document.write("<br/>");
    
    s.setMonth(5);
    
    document.write(s);
    document.write("<br/>");
    
    
    s.setMonth(6); 
    
    document.write(s)

    【讨论】:

    • 太棒了,谢谢!我没有看到那个链接,它确实解释了这个问题。 :)
    猜你喜欢
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多