2014-08-29 20 views
0

Я пытаюсь рассчитать число понедельников, сред и пятниц между 2 датами в Tasker, поэтому мне нужна математическая формула, возможно, используя дату в секундах, то есть время unix, или код javascript. Я пробовал Googling и ломал свой мозг любым способом, чтобы даже начать это, и я потерялся, поэтому я еще ничего не пробовал. Единственное, о чем я мог думать, это получить общее количество дней и делить на 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, поэтому 1 сентября 2014 года - Date(2014,8,1).

+0

Это очень полезно. Есть ли какая-либо формула, которую я могу дать также массив дат, который будет исключать или не засчитываться между двумя датами? – Poonam

+0

@Poonam В этом случае просто сверните по массиву дат и подсчитайте те, которые находятся между двумя датами. Если ваша ситуация более сложная, пожалуйста, отправьте ее как отдельный вопрос. – Matt

1

Предположите общее количество дней n. Тогда число любого дня недели изначально n/7. Теперь возьмите n = n % 7. В зависимости от значения тока n вы можете легко рассчитать окончательное количество дней.

В качестве примера:

Предположим, ваш первый день Friday и общее количество дней 100. Итак, n = 100. Есть минимальный 100/7 или 14 каждого буднего дня находится в интервале. 100 % 7 = 2. Таким образом, окончательный подсчет есть,

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

@HeatherLeigh, если я мог бы предоставить вам точную вещь, которую вы ожидали, я думаю, принимая ответ не повредит вам много, это будет ? – taufique

+0

Мне нужно автоматизировать (отсюда и использование Tasker), чтобы он мог принимать 2 даты и выводить количество понедельников, сред и пятниц между ними. – HeatherLeigh

-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; 
    } 
} 
Смежные вопросы