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