Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带月差的JavaScript日期计算_Javascript_Date - Fatal编程技术网

带月差的JavaScript日期计算

带月差的JavaScript日期计算,javascript,date,Javascript,Date,我想计算一个新的日期,将月数添加到一个特定的日期 例如: 我有一个日期“06/30/2012”(2012年6月30日),还有一个月数“2”或“3”个月 现在我想要一个函数,它获取两个值并返回指定日期后2个月的日期 请告诉我如何做到这一点。 您可以尝试使用此代码,它包含了您需要的所有日期加减操作 Date.prototype.add = function (sInterval, iNum){ var dTemp = this; if (!sInterval || iNum

我想计算一个新的日期,将月数添加到一个特定的日期

例如:

我有一个日期“06/30/2012”(2012年6月30日),还有一个月数“2”或“3”个月

现在我想要一个函数,它获取两个值并返回指定日期后2个月的日期

请告诉我如何做到这一点。

您可以尝试使用此代码,它包含了您需要的所有日期加减操作

Date.prototype.add = function (sInterval, iNum){
      var dTemp = this;
      if (!sInterval || iNum == 0) return dTemp;
      switch (sInterval.toLowerCase()){
        case "ms":
          dTemp.setMilliseconds(dTemp.getMilliseconds() + iNum);
          break;
        case "s":
          dTemp.setSeconds(dTemp.getSeconds() + iNum);
          break;
        case "mi":
          dTemp.setMinutes(dTemp.getMinutes() + iNum);
          break;
        case "h":
          dTemp.setHours(dTemp.getHours() + iNum);
          break;
        case "d":
          dTemp.setDate(dTemp.getDate() + iNum);
          break;
        case "mo":
          dTemp.setMonth(dTemp.getMonth() + iNum);
          break;
        case "y":
          dTemp.setFullYear(dTemp.getFullYear() + iNum);
          break;
      }
      return dTemp;
    }

    //sample usage
    var d = new Date();
    var d2 = d.add("d", 3); //+3days
    var d3 = d.add("h", -3); //-3hours
    var d4 = d.add("mo", 2); //+2 Months

解析片段并重新构建:

function addMonths(d, offset)
{
    return new Date(d.getFullYear(), d.getMonth()+offset, d.getDate());
}

var d = new Date();
console.log(d.toDateString());
// Thu Jun 28 2012

var twoMonthsFromNow = addMonths(d, 2);
console.log(twoMonthsFromNow.toDateString());
// Sun Aug 28 112

如果你想进入下个月,当天溢出时,那么

var d = new Date(2012, 6-1, 30);
d.setMonth(d.getMonth()+3);
如果你想呆在新的一个月内,调整你的日期,然后

var d = new Date(2012, 6-1, 30);
var add_months = 8
var d2 = new Date(Math.min(new Date(d.getYear(), d.getMonth()+add_months+1, 0),
              new Date(d.getYear(), d.getMonth()+add_months, d.getDate())))

这里已经有人回答了,你应该先搜索可能的副本