Calculate number of specific weekdays between dates

后端 未结 3 2101
孤独总比滥情好
孤独总比滥情好 2020-12-11 08:03

I\'m trying to calculate the number of Mondays, Wednesdays, and Fridays between 2 dates in Tasker, thus I need a math formula, possibly utilizing the date in seconds form,

3条回答
  •  青春惊慌失措
    2020-12-11 08:17

    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).

提交回复
热议问题