【发布时间】:2017-05-10 14:14:47
【问题描述】:
我有一个 HTML5 日期选择器,我想在点击按钮时更改它的值。
<input type="date" id="datepicker" />
<button onclick="nextDay()">next</button>
我的方法,因为值是字符串,是把它解析成Date,操作后,转回来到字符串。但我的问题是,日期的月份是从 0 到 11,而日期选择器的月份是从 1 到 12。
代码:
// get the value
function getDatepicker() {
// get
var string = datepicker.val();
var date;
// verify the string is a valid date
if (isNaN(Date.parse(string))) {
// invalid date, get today()
date = new Date();
} else {
// String to Date
date = new Date(string);
}
return date;
}
// operate
function addDays(date, days) {
date.setDate( new Date(date.getDate() + days));
return date;
}
// set the value
function setDatepicker(date) {
function addZero(num) {
return ('0' + num).slice(-2);
}
date.setMonth( date.getMonth() +1 );
var day = date.getDate();
var month = date.getMonth();
var year = date.getFullYear();
var string = [year, addZero(month), addZero(day)].join('-');
datepicker.val(string);
}
var date = getDatepicker();
addDays(date,-1);
setDatepicker(date);
显然由于 datepicker 初始值是正确的,当转换为 Date 时,它会正确执行,但是当将 Date 转换为 datepicker 值时,它会减去一个月。 它每天都可以正常工作,但在更改月份时会失败,例如:
开始日期 = 1/4/2017 -1day = 31/3/2017 +1month = 1/5/2017
然后下次我得到 datepicker 值时,将是 2017 年 1 月 5 日 -1 个月,我将处于无限循环中。
有人可以解释一下如何解决这个问题吗? 提前致谢!
PS:tl;dr 加粗:)
【问题讨论】:
-
为什么不直接发布执行此操作的实际代码?
-
@christo8989 因为太乱了,能回答的人估计也用不上了。
-
错字:
var day = date.getDate(); -
@Stan 错字是什么?
-
你反对使用momentjs之类的东西吗?
标签: javascript jquery date datepicker