如何使用Laravel/JavaScript获得每年的公共假日?

vfh0ocws  于 2023-01-31  发布在  Java
关注(0)|答案(1)|浏览(230)

我是一个网络编程的初学者,现在我想得到两个日期之间的天数,不包括周末和我国每年的公共假日。我想得到一个我自己特定年份的假日列表。比如我通过了2021年,那么它会返回2021年的所有假日,类似地,如果我通过了2022年,那么它会返回2022年。
通过使用JavaScript,我计算了两个日期(不包括周末)之间的差异。
下面的代码描述两个日期之间的差异(不包括周末)。

function getBusinessDateCount (startDate, endDate) {
       var elapsed, daysBeforeFirstSaturday, daysAfterLastSunday; 
       var ifThen = function (a, b, c) { 
           return a == b ? c : a;
        };
    
    elapsed = endDate - startDate; elapsed /= 86400000;
    
    daysBeforeFirstSunday = (7 - startDate.getDay()) % 7; daysAfterLastSunday = endDate.getDay();
    
    elapsed -= (daysBeforeFirstSunday + daysAfterLastSunday);

    elapsed = (elapsed / 7) * 5; 
    
    elapsed += ifThen(daysBeforeFirstSunday - 1, -1, 0) + ifThen(daysAfterLastSunday, 6, 5);
    
    return Math.ceil(elapsed); }
    
       $(document).ready(function(){    
          $(document).on('change','#date2',function (evt) { 
             let start = document.querySelector('#date1').value, 
             end = document.querySelector('#date2').value,
             result = getBusinessDateCount(new Date(start), 
             new Date(end));  
             document.getElementById("days").value = result+ " Jours";
    
        }); });

现在,我陷入了如何添加我国每年的公共假日,并得到两个日期之间的数字,不包括周末和公共假日。
如果你有什么想法,请帮助

6ljaweal

6ljaweal1#

您有date1和date2。date1在year1中,date2在year2中。

第二年〉=第一年

即使有可能有些节日不是每年都庆祝的,或者,它们是在你的两个约会之间引入的,为了简单起见,我将假设任何节日都是每年庆祝的。
所以,假设每年有n个节日,你也知道

第1年〈y〈第2年

年,有n个假期。因此:

let holidays = 0;
if (year2 > year1 + 2) {
    holidays = (year2 - year1 - 1) * n;
}

现在,您需要循环您的假期,并将它们的月份和日期与date1date2的月份和日期进行比较,因此,如果它们晚于date1,则将它们相加,如果它们早于date2,则将它们相加(如果两个条件都满足,则将它们相加两次):

let month1 = date1.getMonth();
let day1 = date1.getDate();
let month2 = date2.getMonth();
let day2 = date2.getDate();
for (let holiday of holidayArray) {
    let m = holiday.getMonth();
    let d = holiday.getDate();
    if ((month1 < m) || ((month1 === m) && (day1 <= d))) {
        holidays++;
    }
    if ((month2 > m) || ((month2 === m) && (day2 >= d))) {
        holidays++;
    }
}

现在,让我们关注周末,幸运的是这部分已经在SO at How to determine number Saturdays and Sundays comes between two dates in java script解决了

function countWeekendDays( d0, d1 )
{
  var ndays = 1 + Math.round((d1.getTime()-d0.getTime())/(24*3600*1000));
  var nsaturdays = Math.floor( (d0.getDay()+ndays) / 7 );
  return 2*nsaturdays + (d0.getDay()==0) - (d1.getDay()==6);
}

countWeekendDaysholidays的结果,这应该可以解决问题。

相关问题