Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不计算两个日期之间的给定假日或周末_Javascript_Jquery_Date_Datepicker - Fatal编程技术网

Javascript 不计算两个日期之间的给定假日或周末

Javascript 不计算两个日期之间的给定假日或周末,javascript,jquery,date,datepicker,Javascript,Jquery,Date,Datepicker,我已经在我的js文件中包含了给定的代码 $( '.dateDisable' ).change(function() { calculateDays(); }); function calculateDays() { var first = new Date( $( '#start_date' ).val() ), last = new Date( $( '#end_date' ).val() ), daysDiff = leaveCalculation( first

我已经在我的js文件中包含了给定的代码

$( '.dateDisable' ).change(function() {
    calculateDays();
});

function calculateDays() {
  var first = new Date( $( '#start_date' ).val() ),
    last = new Date( $( '#end_date' ).val() ),
    daysDiff = leaveCalculation( first,last);  
}

function leaveCalculation( d1, d2 ) {
  alert(gon.holiday) // 2015-08-28,2015-09-25,2016-08-31,2016-08-07,2015-08-13,2016-08-29,2016-01-07,2015-09-08
  var weeks, dateDiff, weekDay1, weekDay2;
  if ( d2 < d1 ) return -1;
  weekDay1 = d1.getDay(),
    weekDay2 = d2.getDay();
  weeks = Math.floor( ( d2.getTime() - d1.getTime() ) / 604800000 );
  if ( weekDay1 <= weekDay2 )
    dateDiff = ( weeks * 5 ) + ( weekDay2 - weekDay1 );
  else
    dateDiff = ( ( weeks + 1 ) * 5 ) - ( weekDay1 - weekDay2 );
  return ( dateDiff + 1 );
}
$('.dateDisable').change(函数(){
calculateDays();
});
函数calculateDays(){
var first=新日期($(“#开始日期”).val(),
last=新日期($('end_Date').val()),
daysDiff=假期计算(第一次、最后一次);
}
函数计算(d1、d2){
警报(冈州假日)//2015-08-282015-09-252016-08-312016-08-072015-08-132016-08-292016-01-072015-09-08
变量周、日期差、工作日1、工作日2;
如果(d2

var gon={};
gon[“假日”]=“2015-08-282015-09-252016-08-312016-08-072015-08-132016-08-292016-01-072015-09-08”。拆分(“,”);
//2个助手函数-我认为moment.js缩小了35K,太过分了
函数板(num){return(“0”+num).slice(-2);}
函数formatDate(date){var d=new date(date),dArr=[d.getFullYear(),pad(d.getMonth()+1),pad(d.getDate())];返回dArr.join('-');}
函数计算日期(第一个、最后一个){
日变化=24*60*60*1000,
daysDiff=parseInt((last.getTime()-first.getTime())/aDay,10)+1;
如果(daysDiff>0){

对于(var i=first.getTime(),lst=last.getTime();i这可以通过以下方式轻松实现:

var startString=“2015-01-01”;
var endString=“2015-02-20”;
var holidaysString=“2015-01-032015-01-152015-02-052015-03-01”;
var开始=力矩(开始串);
var端=力矩(端串);
var holidays=holidaysString.split(',).map(函数(str){
返回力矩(str);
});
var getDuration=函数getDuration(开始、结束、假日){
var overlappingDays=假日.reduce(函数(计数,假日){
返回计数+~~(holiday.isAfter(开始)和holiday.isBefore(结束));
}, 0);
var diff=end.diff(开始“天”);
返回差异-重叠天数;
};
output.innerHTML=getDuration(开始、结束、假日);


天数。
您可以计算两天之间的天数

然后将在
gon.holiday
输入的日期字符串拆分为一个数组

然后循环这个数组,减去两个日期之间的天数

函数calculateDays(){
var first=新日期(“2015年8月27日”),
last=新日期('2015年8月31日'),
daysDiff=假期计算(第一次、最后一次);
}
函数计算(d1、d2){
var holidayArr=[];
var holiday=gon.holiday;/“2015-08-282015-09-252016-08-312016-08-072015-08-132016-08-292016-01-072015-09-08”;
如果(d2对于(var i=0;iIs
gon.holiday
数组还是普通字符串?@dinshaw raje:什么是dDate2和dDate1?顺便说一句,你可以通过使用loop与假期进行比较,然后从diffday中提取它们。它获取的不是像这样的数组2015-08-282015-09-252016-08-312016-08-072015-08-132016-08-292016-01-072015-09-08它不工作根据我的要求,如果我的日期介于“2015年8月27日”-“2015年8月31日”然后天数差是5,但我不想计算sat和sun,所以它仍然是3,但如果8月28日有其他假日,即周五,那么它将不计算假日,输出我想要的是2。@dinshawraje如果你想排除周末,你应该在你的问题中写下它。我在我的代码中提到我正在计算天数,然后减去它们。我认为你的代码不容易理解,可读性不强beginners@mplungjan你到底有什么困难?使用标准数组方法还是理解按位not?我也想排除周末,请参阅更新。我替换了你的休假计算