我正在尝试向数组元素添加/减去一个整数。我的功能是
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)
时。它不起作用。这样做的正确方法是什么?
答案 0 :(得分:1)
你的方法不正确:
parseInt
应始终使用基数10. addToMonth("2016-31-03", 1)
将提供 2016-32-03 。错误的X。addToMonth("2016-01-03", -1)
将提供 2016-00-03 。错误的X。0
的方式不对。 (找出原因。)使用日期上的setDate
和getDate
功能。
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>