皮卡迪和 moment.js
Pikaday and moment.js
我需要在加载表单时显示两个输入框,并用当前日期填充一个(我已经可以使用了),另一个用明天的日期填充,我的代码不起作用,有人可以解释为什么吗,谢谢进步!
<input type="text" id="txtArrival">
<input type="text" id="txtDeparture">
var aDate, dDate, a, days;
//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'));
}
});
我认为问题在于您在 dDate
字段中设置日期的方式。 new Date() + 1
不会在日期中添加一天(可能会添加毫秒,或者在日期字符串中添加“1”)。
您要做的是从日期部分构造一个日期:
var date = new Date(); // todays date
date.setDate(date.getDate() + 1);
然后设置:
defaultDate: date,
... etc, etc
您的代码不起作用的原因是 javascript 中的日期在技术上是幕后的整数。整数表示毫秒(自 1/1/1970 起)。所以 new Date() + 1
只是在当前日期中增加一毫秒,并没有增加一整天。
您可以通过计算一天中的毫秒数并将此数字相加来增加一天。这样的事情可能会奏效:
defaultDate: new Date(new Date().getTime() + (1000 * 60 * 60 * 24))
这是可行的,因为 getTime()
获取自 1/1/1970 以来的毫秒数,然后我们以毫秒为单位添加一天并根据该整数创建一个新日期。
编辑
在您的评论中,您说要在 dDate.setDate(s_date)
行的 dDate
中添加一天。 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);
}
我需要在加载表单时显示两个输入框,并用当前日期填充一个(我已经可以使用了),另一个用明天的日期填充,我的代码不起作用,有人可以解释为什么吗,谢谢进步!
<input type="text" id="txtArrival">
<input type="text" id="txtDeparture">
var aDate, dDate, a, days;
//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'));
}
});
我认为问题在于您在 dDate
字段中设置日期的方式。 new Date() + 1
不会在日期中添加一天(可能会添加毫秒,或者在日期字符串中添加“1”)。
您要做的是从日期部分构造一个日期:
var date = new Date(); // todays date
date.setDate(date.getDate() + 1);
然后设置:
defaultDate: date,
... etc, etc
您的代码不起作用的原因是 javascript 中的日期在技术上是幕后的整数。整数表示毫秒(自 1/1/1970 起)。所以 new Date() + 1
只是在当前日期中增加一毫秒,并没有增加一整天。
您可以通过计算一天中的毫秒数并将此数字相加来增加一天。这样的事情可能会奏效:
defaultDate: new Date(new Date().getTime() + (1000 * 60 * 60 * 24))
这是可行的,因为 getTime()
获取自 1/1/1970 以来的毫秒数,然后我们以毫秒为单位添加一天并根据该整数创建一个新日期。
编辑
在您的评论中,您说要在 dDate.setDate(s_date)
行的 dDate
中添加一天。 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);
}