我需要在加载表单时显示两个输入框,并用当前日期填充一个(我已经在工作),另一个用明天的日期填充,我的代码不起作用,有人可以解释一下原因,谢谢!
<input type="text" id="txtArrival">
<input type="text" id="txtDeparture">
var aDate,dDate,a,天;
//arrival
aDate = new Pikaday({
field: document.getElementById('txtArrival'),
defaultDate: new Date(),
format: 'D MMM YYYY',
setDefaultDate: true,
minDate: new Date(),
onSelect: function () {
console.log(aDate.getMoment().format('DD/MM/YY'));
var s_date = this.getDate();
var e_date = dDate.getDate();
// regardless set the end date to be forced to select a date from the start date
dDate.setMinDate(this.getDate());
// if the start date is now > end date then change the end date
if (s_date > e_date) {
dDate.setDate(s_date);
}
}
});
// departure
dDate = new Pikaday({
field: document.getElementById('txtDeparture'),
defaultDate: new Date() + 1,
setDefaultDate: true,
format: 'D MMM YYYY',
onSelect: function () {
console.log(dDate.getMoment().format('DD/MM/YY'));
}
});
答案 0 :(得分:0)
我认为问题在于您在dDate
字段中设置日期的方式。 new Date() + 1
不会在日期上添加一天(它可能会添加毫秒,也可能在日期字符串中添加“ 1”)。
您要做的是从日期部分构造一个日期:
var date = new Date(); // todays date
date.setDate(date.getDate() + 1);
然后设置它:
defaultDate: date,
... etc, etc
您的代码无法正常工作的原因是,从技术上讲,javascript中的日期在后台是整数。整数表示毫秒(自1970年1月1日开始)。因此new Date() + 1
只是将毫秒添加到当前日期,而不是添加一整天。
您可以通过计算一天中的毫秒数并添加此数字来添加一天。这样的事情可能会起作用:
defaultDate: new Date(new Date().getTime() + (1000 * 60 * 60 * 24))
之所以可行,是因为getTime()
自1970年1月1日以来获得了毫秒数,然后我们以毫秒为单位添加了一天,并从该整数中创建了一个新日期。
编辑
在您的评论中,您说您想在dDate
行中向dDate.setDate(s_date)
添加一天。 s_date
是否需要保持相同的日期?如果没有,您可以使用我的第一种方法向s_date
添加一天。如果您无法更改s_date
,则需要创建一个新的日期对象并将其添加。
如下所示的方法应该起作用(s_date
将保留其原始值)。
if (s_date > e_date) {
var newDate = new Date(s_date.getTime());
newDate.setDate(newDate.getDate() + 1);
dDate.setDate(newDate);
}