javascript - 设置验证以使用 javascript 检查两个日期

标签 javascript jquery date time datejs

我试图找到两个日期之间的差异,当用户想要更改到达日期时,记住更改前到达/离开之间的天数,更改到达日期后,自动将出发日期设置为x天后到达日期,

因此,如果我的日期为 2017 年 6 月 1 日 - 2017 年 6 月 5 日(4 天),并且用户将抵达日期更改为 2017 年 6 月 4 日,然后将出发日期设置为 2017 年 6 月 8 日(+ 4 天)

function changedDate() {

    var startDate = $("#Arrival").val().split("-");
    var endDate = $("#Departure").val().split("-");   
    var arrivalDate = new Date(startDate[2], startDate[1] - 1, startDate[0]);
    var departureDate = new Date(endDate[2], endDate[1] - 1, endDate[0]);
    var timeDiff = Math.abs(departureDate.getDate() - arrivalDate.getDate());
    var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24));

     
    if (arrivalDate >= departureDate) {
        var arrDate = arrivalDate;
        arrDate.setDate(arrDate.getDate() + 1);

        var month = arrDate.getMonth() + 1;
        if (month < 10)
            month = '0' + month;
        var day = arrDate.getDate();
        if (day < 10)
            day = '0' + day;
        var year = arrDate.getFullYear();

      
        $("#Departure").val(day + '-' + month + '-' + year);
    }         

    if (timeDiff > 1) {
        var arrDate = arrivalDate;
        var depDate = departureDate;
        arrDate.setDate(arrDate.getDate());
        depDate.setDate(depDate.getDate() + diffDays);

        var month = arrDate.getMonth() + 1;
        if (month < 10)
            month = '0' + month;
        var day = arrDate.getDate();
        if (day < 10)
            day = '0' + day;
        var year = arrDate.getFullYear();
        
        var monthd = depDate.getMonth() + 1;
        if (monthd < 10)
            monthd = '0' + month;
        var dayd = depDate.getDate();
        if (dayd < 10)
            dayd = '0' + day;
        var yeard = depDate.getFullYear();

        $("#Arrival").val(day + '-' + month + '-' + year);
        $("#Departure").val(dayd + '-' + monthd + '-' + yeard);
    }

    if(arrivalDate < departureDate) {
        var arrDate = arrivalDate;
        arrDate.setDate(arrDate.getDate() + 1);

        var month = arrDate.getMonth() + 1;
        if (month < 10)
            month = '0' + month;
        var day = arrDate.getDate();
        if (day < 10)
            day = '0' + day;
        var year = arrDate.getFullYear();

        $("#Departure").val(day + '-' + month + '-' + year);

    }
             
}

this condition not related with the validation that i want this is to set departureDate +1 after arrival date on change

if(到达日期 >= 出发日期)

this condition not related with the validation that i want this is to set departureDate +1 after arrival date on change

if(到达日期 < 出发日期)

this condition i make it for this validation but didn't work

如果(时间差 > 1)

最佳答案

不要使用 getDate() 方法来计算 timeDiff,而是使用 getTime() 并执行简单的减法,然后执行毫秒到天的重构。

类似这样的事情:

var startDate = $("#Arrival").val().split("-");
var endDate = $("#Departure").val().split("-");   
var arrivalDate = new Date(startDate[2], startDate[1] - 1, startDate[0]);
var departureDate = new Date(endDate[2], endDate[1] - 1, endDate[0]);
var timeDiff = Math.abs(departureDate.getTime() - arrivalDate.getTime());
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24));

此外,在减去Date类型值时,getTime()方法变为可选,也可以直接减去departureDate -arrivalDate

关于javascript - 设置验证以使用 javascript 检查两个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43913260/

相关文章:

javascript - 自定义指令内 ngDirectives 的奇怪行为

javascript - 如何反射(reflect)JStree对原始XML的更改?

javascript - 用于 AngularJS 的 jQuery "$.when().done()"

javascript - 如何在 React-Native 上分析网络?

javascript - 如何在回调中访问正确的“this”?

用于 RGB 颜色验证器的 Javascript 正则表达式

javascript - 显示其他页面的内容时避免滚动条?

java - 如何从 Java 中的 Date 对象中减去 X 天?

javascript - 通过循环将日期添加到数组

PHP - 创建与时间相关的时间表