JS特定结束日期计算器

时间:2017-07-24 10:08:38

标签: javascript date

如果我的开始日期是1月31日,我加1个月,则返回3月2日的日期。 我正在尝试制作一个脚本,以这种方式添加数月:

starting date : 31/01/2000
+1 month = 29/02/2000
+2 months = 31/03/2000
+3 months = 30/04/2000 
....
+12 months = 28/02/2001

另一个案例:

Starting date : 28/02/2001
+1 month : 31/03/2001
+2 months : 30/04/2001
...

因此,我们的想法是,如果开始日期是当月的最后一天,结束日期必须是月份的最后一天。

  

所以,我的代码逻辑如下:

     

var date = new Date(2017,01,30);   1.获取此日期的当前日期。 (X)   2.如果x <本月的日子,到目前为止增加1个月      2.1同样如果,如果修改日期&lt; x,将日期设置为上个月的最后一天   3.主要的if,设定日期到下个月的最后一天

我的JSFiddle在这里:https://jsfiddle.net/5mfLo8zs/ Idk语法有什么问题,但它给了我一个.getDate()不是函数错误,可能,它不是唯一的问题。

P.S。我知道这个主题是重复的,我花了10分钟来搜索同意的问题,但我发现如何设置月的最后一天,但在这里我需要更多的东西。

1 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

逻辑:

  • 检查过去的日期是否是该月的最后一天?
    1. 如果是,您需要添加1到几个月。这是因为,通过创建一个日期作为下个月的第一天然后减去1来获取每月最后一天的逻辑。
  • 现在初始化一个将保存day值的临时变量。默认情况下将其设置为0.
  • 如果月份相同,请将此临时变量设置为传递日期的日期。否则让它为0。
  • 现在您拥有了创建新日期的所有参数。把它返还。请注意,更新相同的日期变量将覆盖原始值。所以尽量避免对它进行任何操纵。

&#13;
&#13;
function addMonths(date, months) {
  var d = 0;
  var next = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1);
  if (next.getMonth() === date.getMonth()) {
    d = date.getDate()
  }
  else{
    months++
  }

  // use following line in actual code.
  // return new Date(date.getFullYear(), date.getMonth() + months, d)
  // This line is just fror demonstration purpose.
  return new Date(date.getFullYear(), date.getMonth() + months, d).toDateString();
}

console.log(addMonths(new Date(2017, 0, 31), 1));
console.log(addMonths(new Date(2017, 0, 31), 3));
console.log(addMonths(new Date(2017, 0, 15), 3));
console.log(addMonths(new Date(2016, 11, 31), 1));
console.log(addMonths(new Date(2016, 11, 11), 1));
&#13;
&#13;
&#13;