【问题标题】:Javascript setDate() unexpected behaviour wrong month [duplicate]Javascript setDate()意外行为错误月份[重复]
【发布时间】:2013-08-09 12:41:11
【问题描述】:

谁能向我解释为什么“defaultDate.setDate(d.getDate());”中的月份设置不正确在下面的代码中?我知道 JS 从 0 索引开始运行几个月,但我会假设 setDate() 会处理任何差异。

<script>
var defaultDate = new Date();
 window.alert(defaultDate);

function testfunction(){
    var d=new Date();
    window.alert(d);
    d.setDate(d.getDate()-10);
    window.alert(d);
    defaultDate.setDate(d.getDate());
    window.alert(defaultDate);
    }
   testfunction();
</script>

【问题讨论】:

  • 感谢您的链接,但是如前所述,setDate() 逻辑不应该处理这个问题吗?我使用 Date() 函数设置日期并减去 10,然后我将 defaultDate 中的日期设置为此。我在代码中没有任何地方声明一个数字,因此这不应该因为两个声明都使用相同的方法而起作用吗?我希望 d.setDate(d.getDate() - 10);如果这是一个 0 索引问题,也会显示错误的月份
  • 另外,从文档来看,这里的原始格式应该是一个long代表millis

标签: javascript date


【解决方案1】:

setDate()getDate() 函数仅指月份中的某一天。当您从 d 对象中减去 10 天时,它也会自动设置月份,例如 July。但是,当您设置defaultDate 对象的日期时,您只需设置天数(因此月份和星期几不会更改)。

【讨论】:

    【解决方案2】:

    setDate() 期望 1-31 范围内的数字,所以当你通过它时 -1(今天是第 9 位,所以 9-10 = -1)你不能指望它做任何有意义的事情。如果我告诉你将日历设置为 8 月 -1 日,你会怎么做?

    【讨论】:

    • 但是这个日期在 d.setDate(d.getDate()-10);它只会在 defaultDate.setDate(d.getDate());
    • w3schools.com/jsref/jsref_setdate.asp 表明 -1 和 32 是可接受的输入
    • 不,它没有。 defaultDate 的月份是 August(截至今天),d 的日期是 30 日。因此,当您执行defaultDate.setDate(d.getDate()) 时,您将获得 8 月 30 日。一切如预期。
    • "预期值为 1-31,但允许其他值:0 将导致上个月的最后一天 -1 将导致上个月最后一天的前一天" -因此我的理解是日期应设置为正确存储在 d 中的 7 月 30 日,但是将其提供给 defaultdate 会导致 8 月 30 日
    • w3schools 不是实际参考,不应被视为真实参考。它记录了应该不记录的行为。是的,它有效。不,你不应该使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 2017-12-29
    相关资源
    最近更新 更多