皮卡迪和 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);
}