如何在日期中添加和减去月份?

时间:2016-04-05 07:52:49

标签: javascript

我正在尝试向数组元素添加/减去一个整数。我的功能是

var addToMonth = function (date, monthsToAdd) {
    var tempDate = date.split("-");
    tempDate[1] = parseInt(tempDate[1]) + monthsToAdd;
    tempDate[1] = 0 + tempDate[1];
    console.log("TempDate "+tempDate[1]);
    tempDate = tempDate.join("-");
    console.log("Added TempDate: "+tempDate);
    return tempDate;
}

可接受的日期字符串为:date = "2016-04-05"。如果将函数调用为addToMonth(date,1)。输出正确为2016-05-05。但是当我把它称为addToMonth(date, -1)时。它不起作用。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

你的方法不正确:

    如果使用小数,
  1. parseInt应始终使用基数10.
  2. addToMonth("2016-31-03", 1)将提供 2016-32-03 。错误的X。
  3. addToMonth("2016-01-03", -1)将提供 2016-00-03 。错误的X。
  4. 填充0的方式不对。 (找出原因。)
  5. 使用日期上的setDategetDate功能。

    var addToMonth = function (date, monthsToAdd) {
        var d = new Date(date);
        d.setDate(d.getDate()+monthsToAdd);
        return d;
    }
    

答案 1 :(得分:1)

附录

选择的答案实际上是不正确的,因为问题询问如何添加月份,而不是天数。正确的解决方案是:

   function addToMonth( date, months ) {
        var d = new Date( date || new Date() );
        d.setMonth( d.getMonth() + (months || 0), d.getDate());
        return d;      
    }

显示然后运行代码段以查看演示。

我也投了这个问题...因为它确实显示了努力,即使对于有经验的编码人员来说,日期也很棘手(特别是涉及时区时)。这就是为什么有像monment.js等库的原因。有关Date对象的更多信息,请参阅:MDN Date

function addToMonth( date, months ) {
    var d = new Date( date || new Date() );
    d.setMonth( d.getMonth() + (months || 0), d.getDate());
    return d;      
}


// Test Data
var html = '', iso, step = 1;


[
  '4/5/2016',
  '4/5/2016 01:00 GMT', 
  '2016-04-05', 
  '2016-04-05T00:00:00', 
  '2016-04-05T23:59:59',
  '2016-04-05T23:59:59Z',
  '2016', 
  '4/5/2016',
  undefined, 
  null, 
  0, 
  '',
  (new Date())

].forEach(function(v,i) {
  iso = addToMonth( v, -1).toISOString().split('T').shift();
  html += '<tr><td>' + v + '</td><td>-1</td><td>' + iso + '</td></tr>';
  iso = addToMonth( v, 1).toISOString().split('T').shift();
  html += '<tr><td>' + v + '</td><td>+1</td><td>' + iso + '</td></tr>';


});

stdout.innerHTML = '<table>' + html + '</table>';
table {
  border-collapse: collapse;
  background-color: white;
}
td {
  max-width: 10em;
  min-width: 4em;
  border: 1px lightgray solid;
  padding: 2px;
  overflow: hidden;
  white-space: nowrap;
  font-family: monospace;
}
tr:nth-child(odd) {
  background-color: aliceblue;
}
<div id="stdout"></div>