Pikaday和moment.js

时间:2019-01-08 15:02:20

标签: html momentjs pikaday

我需要在加载表单时显示两个输入框,并用当前日期填充一个(我已经在工作),另一个用明天的日期填充,我的代码不起作用,有人可以解释一下原因,谢谢!

 <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'));
    }
    });

1 个答案:

答案 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);
}