1

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

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

1 回答 1

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);
}
于 2019-01-08T15:13:02.573 回答