2014-08-29 119 views
0

我试图计算Tasker中两个日期之间的星期一,星期三和星期五的数量,因此我需要一个数学公式,可能使用秒表形式的日期,即unix时间,或一个JavaScript代码。我尝试过使用谷歌搜索和任何方式来开始我的大脑,我迷路了,所以我还没有尝试过任何东西。我唯一能想到的就是获得总天数除以7,但这显然对我无能为力,特别是如果其中一天或两天都是周中。任何人都可以将我指向更好的方向吗?计算日期之间的特定工作日的数量

回答

5

如何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); 
} 

两个日期之间的计数周一,周三和周五[1,3,5]例如:

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 

注意,本月参数Date是基于0的,因此2014年9月1日是Date(2014,8,1)

+0

这非常有用。是否有任何公式可以给出一组日期,这些日期将排除在两个日期之间或不计算在内? – Poonam 2016-07-20 12:16:44

+0

@Poonam在这种情况下,只是遍历日期数组,并计算两个日期之间的数。如果您的情况比这更复杂,请将其作为单独问题提交。 – Matt 2016-07-20 16:22:06

1

假设总天数为n。然后一周的任何一天的号码最初是n/7。现在采取n = n % 7。根据当前值n,您可以轻松计算出最终的天数。

作为例子:

假设你的第一天是Friday及总天数为100。所以,n = 100。每个工作日的最小100/714在间隔内。 100 % 7 = 2。所以最终计数,

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

@HeatherLeigh,如果我能为您提供您所期望的确切的事情,我想接受的答案也不会太厉害了,它会? – taufique 2014-08-29 05:54:29

+0

我需要它自动化(因此使用Tasker),因此它可能需要2个日期并输出它们之间的星期一,星期三和星期五的数量。 – HeatherLeigh 2014-08-29 06:00:06

-1

如何在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; 
    } 
}