Javascript 不计算两个日期之间的给定假日或周末
我已经在我的js文件中包含了给定的代码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
$( '.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;iIsgon.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?我也想排除周末,请参阅更新。我替换了你的休假计算