Calculate number of specific weekdays between dates

ε祈祈猫儿з 提交于 2019-11-28 14:07:57
Matt

How to count specific days of the week between two dates in O(1):

// days is an array of weekdays: 0 is Sunday, ..., 6 is Saturday
function countCertainDays( days, d0, d1 ) {
  var ndays = 1 + Math.round((d1-d0)/(24*3600*1000));
  var sum = function(a,b) {
    return a + Math.floor( ( ndays + (d0.getDay()+6-b) % 7 ) / 7 ); };
  return days.reduce(sum,0);
}

Example on counting Mondays, Wednesdays, and Fridays [1,3,5] between two dates:

countCertainDays([1,3,5],new Date(2014,8,1),new Date(2014,8,1)) // 1
countCertainDays([1,3,5],new Date(2014,8,1),new Date(2014,8,2)) // 1
countCertainDays([1,3,5],new Date(2014,8,1),new Date(2014,8,3)) // 2
countCertainDays([1,3,5],new Date(2014,8,1),new Date(2014,8,4)) // 2
countCertainDays([1,3,5],new Date(2014,8,1),new Date(2014,8,5)) // 3
countCertainDays([1,3,5],new Date(2014,8,1),new Date(2014,8,6)) // 3
countCertainDays([1,3,5],new Date(2014,8,1),new Date(2014,8,7)) // 3

Note that the month parameter to Date is 0-based, so 1 Sept 2014 is Date(2014,8,1).

Assume total number of days is n. Then number of any day of a week is initially n / 7. Now take n = n % 7. Depending on the value of current n you can easily calculate the final count of days.

As example:

Assume your first day is Friday and total number of days is 100. So, n = 100. There are minimum 100/7 or 14 of each weekday is in the interval. 100 % 7 = 2. So final count is,

Friday -> 14+1 = 15
Saturday -> 14+1 = 15
Sunday -> 14
Monday -> 14
Tuesday -> 14
Wednesday -> 14
Thursday -> 14
user5248404

How to count the number of friday between two date in JavaScript

function myfunction() {
    var frist = document.getElementById("dt_VacStart").value
    var answer = 0;
    var second = document.getElementById("dt_VacEnd").value;
    if (frist != null && second != null) {
        var startDate = new Date(frist);
        var endDate = new Date(second);
        var totalfriday = 0;
        for (var i = startDate; i <= endDate;) {
            if (i.getDay() ==5) {
                totalfriday++;
            }
            i.setTime(i.getTime() + 1000 * 60 * 60 * 24);
        }
        document.getElementById('<%=Friday.ClientID%>').value = totalfriday;
    } else {
        totalfriday = 0;
        document.getElementById('<%=Friday.ClientID%>').value = totalfriday;
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!