Javascript 以天数计算两个日期之间的差异

Javascript 以天数计算两个日期之间的差异,javascript,jquery,html,jquery-ui,datepicker,Javascript,Jquery,Html,Jquery Ui,Datepicker,我想做的是,当用户点击一个按钮时,我想计算并显示两个日期之间的差异 function calcBusinessDays(dDate1, dDate2) { // input given as Date objects var iWeeks, iDateDiff, iAdjust = 0; if (dDate2 < dDate1) return -1; // error code if dates transposed var iWeekday1 = dDate1

我想做的是,当用户点击一个按钮时,我想计算并显示两个日期之间的差异

function calcBusinessDays(dDate1, dDate2) { // input given as Date objects
    var iWeeks, iDateDiff, iAdjust = 0;

    if (dDate2 < dDate1) return -1; // error code if dates transposed

    var iWeekday1 = dDate1.getDay(); // day of week
    var iWeekday2 = dDate2.getDay();
    iWeekday1 = (iWeekday1 == 0) ? 7 : iWeekday1; // change Sunday from 0 to 7
    iWeekday2 = (iWeekday2 == 0) ? 7 : iWeekday2;

    if ((iWeekday1 > 5) && (iWeekday2 > 5)) iAdjust = 1; // adjustment if both days on weekend

    iWeekday1 = (iWeekday1 > 5) ? 5 : iWeekday1; // only count weekdays
    iWeekday2 = (iWeekday2 > 5) ? 5 : iWeekday2;

    // calculate differnece in weeks (1000mS * 60sec * 60min * 24hrs * 7 days = 604800000)
    iWeeks = Math.floor((dDate2.getTime() - dDate1.getTime()) / 604800000)

    if (iWeekday1 <= iWeekday2) {
        iDateDiff = (iWeeks * 5) + (iWeekday2 - iWeekday1)
    } else {
        iDateDiff = ((iWeeks + 1) * 5) - (iWeekday1 - iWeekday2)
    }

    iDateDiff -= iAdjust // take into account both days on weekend

    return (iDateDiff + 1); // add 1 because dates are inclusive
}

$("#datepicker, #datepicker1").change(function() {
    alert("getPricing just got called");
    var d1 = $("#datepicker").val();
    var d2 = $("#datepicker1").val();

    var minutes = 1000*60;
    var hours = minutes*60;
    var day = hours*24;

    var startdate1 = getDateFromFormat(d1, "d-m-y");
    var enddate1 = getDateFromFormat(d2, "d-m-y");

    var newstartdate=new Date();
    newstartdate.setFullYear(startdate1.getYear(),startdate1.getMonth(),startdate1.getDay());

    var newenddate=new Date();
    newenddate.setFullYear(enddate1.getYear(),enddate1.getMonth(),enddate1.getDay());

    var days = calcBusinessDays(newstartdate,newenddate);

    if(days>0) {
        $("#leaves_left").val(days);
    } else {
        $("#leaves_left").val(0);
    }
});

$(function() {
    //alert("getPricing just got called");

    $("#datepicker").datepicker({
        beforeShowDay: $.datepicker.noWeekends, 
        dateFormat: 'yy-mm-dd',
        minDate: 0,
        beforeShow: function() {
            $('.datepicker').datepicker('option', 'maxDate', $('#end_date').val());
        }
    });

    $("#datepicker1" ).datepicker({
        beforeShowDay: $.datepicker.noWeekends, 
        dateFormat: 'yy-mm-dd',
        beforeShow: function() {
            $(this).datepicker('option', 'minDate', $('#datepicker').val());
        }
    });

    $("#button").submit(function(){ 
        alert("getPricing just got called");
        var start   = $('#datepicker').datepicker('getDate');
        var end = $('#datepicker1').datepicker('getDate');
        var days   = (end - start)/1000/60/60/24;
        alert(days);
    });
});

HTML部分


在您的示例中,当您使用日期选择器更改日期时,您已经在计算日期之间的工作日。在这里,我改进了这一部分,仍然使用您从另一个stackOverflow问题复制的calcBusinessDays方法:

$("#datepicker, #datepicker1").change(function() {
    //alert("getPricing just got called");
    var d1 = $("#datepicker").datepicker("getDate");
    var d2 = $("#datepicker1").datepicker("getDate");

    // Calculate only if both dates are defined
    if(d1 != undefined && d2 != undefined) {
        var days = calcBusinessDays(d1,d2);
        if(days > 0) {
            $("#leaves_left").val(days);
        } else {
            $("#leaves_left").val(0);
        }
    }
});
您可以将此方法的一部分外部化,以便在单击按钮时使用它:

var d1 = $("#datepicker").datepicker("getDate");
var d2 = $("#datepicker1").datepicker("getDate");

// Calculate only if both dates are defined
if(d1 != undefined && d2 != undefined) {
    var days = calcBusinessDays(d1,d2);
    alert(days);
}

顺便说一句,您也不应该将dl-dd-dt标记用于您试图实现的类型。我不能给你一把与你的结构相对应的小提琴,只是一个基本的例子:

这是图片的url。因为我不能在我的问题上附加图像。你好@AQEEL,欢迎来到Stack Overflow。问答采用格式;添加图像的语法是![替换文本]http://example.com/path/to/image.jpg. 我已经编辑了你的文章以包含图片。你能提供你的html结构吗?至少主要部分有日期选择器占位符?非常感谢。除了我的问题之外,我还学到了一些新的东西:@Nicolas这里是html部分。我不能在评论中写代码,所以我上传了图片!单击按钮时不会弹出警报。正如我所说,我向您演示了如何计算。对于按钮单击,您必须更改实现方式:使用单击提交按钮,而不是提交。样品:我已经看过了样品,效果很好。但我看到,当两个输入字段都不是空的,并且如果单击按钮,则不会显示警报。Y?在上一个版本中,我在每种情况下都收到了警报:如果两个输入都不是空的,它会通知天数;如果至少有一个输入缺失,它会提醒至少有一个输入未定义
var d1 = $("#datepicker").datepicker("getDate");
var d2 = $("#datepicker1").datepicker("getDate");

// Calculate only if both dates are defined
if(d1 != undefined && d2 != undefined) {
    var days = calcBusinessDays(d1,d2);
    alert(days);
}