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

时间:2017-05-11 10:48:49

标签: javascript jquery date time datejs

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

所以,如果我有01JUN17 - 05JUN17(4天)并且用户将到达日期更改为04JUN17,则将出发设置为08JUN17(+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);

    }
             
}
&#13;
&#13;
&#13;

  

这个条件与我想要的验证无关   在抵达日期变更后设置departureDate +1

if(arrivalDate&gt; = departureDate)

  

这个条件与我想要的验证无关   在抵达日期变更后设置departureDate +1

if(arrivalDate&lt; departureDate)

  

这个条件我做了这个验证,但没有工作

if(timeDiff&gt; 1)

2 个答案:

答案 0 :(得分:0)

不使用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));

此外,在减去日期类型值的同时,getTime()方法变为可选,并且还可以进行直接减法departureDate - arrivalDate

答案 1 :(得分:0)

如果您使用的是datejs,则创建 TimeSpan 会对此有所帮助。

var sync = function () {
    var val1 = $("#Arrival").val();
    var val2 = $("#Departure").val();

    var startDate = Date.parseExact(val1, "ddMMMyy");
    var endDate = Date.parseExact(val2, "ddMMMyy");

    var diff = new TimeSpan(endDate - startDate);
    var newEndDate = startDate.add(diff.days).days();

    $("#Departure").val(newEndDate.toString("ddMMyyy"));
};

您可以通过在startDate输入字段上连接更改侦听器来触发此函数以自动触发。只是一个想法。

希望这有帮助。