【问题标题】:setMonth() setting wrong date in the case of 31st day [duplicate]setMonth() 在第 31 天的情况下设置错误的日期 [重复]
【发布时间】:2016-10-03 11:09:58
【问题描述】:

我正面临 JS 的 setMonth 函数的非常奇怪的行为。 单击图像时,我将显示一个日历,其中包含当前月份的所有日期以及下个月和上个月的某些日期(灰色)。

只要选择的当前日期是任何一个月的 31 日。假设 2017 年 5 月 31 日我选择我将在文本字段中设置。如果我点击 2017 年 6 月 2 日,而不是将文本字段设置为 2017 年 6 月 2 日,它会设置为 2017 年 7 月 2 日?

请指出这里出了什么问题。

使用的代码sn-p如下

var tempDate = new Date(current); //Suppose : current --> Wed May 31 16:09:00 UTC+0530 2017 
var dayOfMonth = parseInt(element.text(), 10); //Suppose : element.text() --> 2   
tempDate.setMonth(tempDate.getMonth() + (dayOfMonth > 15 ? -1 : 1)); //tempDate.getMonth() + (dayOfMonth > 15 ? -1 : 1) returns 10
tempDate.setDate(dayOfMonth);

//Output Expected : 02 June 2017 but it gives 02 July 2017

【问题讨论】:

  • 不太清楚你在问什么,但月份是从 0 开始的。
  • 分享复制您的问题的简约示例。而且,不清楚您对第 31 天的要求是什么。 Tue Oct 31 & Output Expected : 02 June 2017 but it gives 02 July 2017 & suppose 31 may 2017 I select i will set in a textfield. If I click on 2 june 2017 rather then setting textfield to 2 june 2017 it sets 3 July 2017。而您发布的图片只是假设您设置了错误的日期选择器日期格式,但与您所有的身体问题所谈论的内容完全无关
  • 是的,更新了问题。例如在设置日期时实际上犯了错误。
  • 这个问题毫无意义。请参阅How to create a minimal, complete and verifiable example

标签: javascript date datetime


【解决方案1】:

我认为这是当月没有天(31)时操作的标准行为,操作取下个月有当天的操作

>var date = new Date('2018/10/31');
undefined
>date
Wed Oct 31 2018 00:00:00 GMT-0600 (hora estándar central)
>date.setMonth(date.getMonth() + 1);
1543644000000
>date
Sat Dec 01 2018 00:00:00 GMT-0600 (hora estándar central)

【讨论】:

    【解决方案2】:

    在 javascript 日期对象中,月份是从 0 开始的,所以如果你想生成任何月份,那就做相应的事情。请参阅此网址了解日期:MDN Date

    作为您的代码,我认为您在 dayOfMonth > 15 ? 1:-1

    var dayOfMonth  = 13;
    alert((dayOfMonth > 15 ? 1 : -1))
    var tempDate = new Date(); 
    tempDate.setMonth(tempDate.getMonth() + (dayOfMonth > 15 ? 1 : -1)); 
    tempDate.setDate(dayOfMonth);
    alert(tempDate)

    【讨论】:

    • 好的,但是getMonth() 也是从零开始的,OP 正在使用它来设置月份。所以我不确定这是这里的问题
    • 感谢您的快速回复。我找到了解决办法。实际上 JavaScript 的 Date 对象允许你给出无效的月份和日期组合;他们会自动为您更正这些错误(例如,如果您在 6 月将日期设置为 31,则会自动将其设为 7 月 1 日)。
    • @user222419——这取决于你所说的“无效”。 Date 对象的方法在标准中都有很好的定义,它们的行为对于进行 Date 操作非常方便。您希望 6 月 30 日 + 1 天返回无效日期还是 7 月 1 日?
    • 感谢各位快速回复。我找到了解决方案,我不得不调试代码很多次才能理解这个问题。实际上我发现我应该在 setMonth 之前设置日期。我改变了顺序,它奏效了。 :-)
    • 请不要引用 w3schools,该网站充满了错误。使用 ECMA-262 或 MDN。
    猜你喜欢
    • 2017-02-09
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多