Intereting Posts
Как добавить окно подтверждения в php перед удалением? файл ics не распознается по прогнозам router.js Функция не выполнена WordPress & suggest.js – запрос Ajax возвращает правильный ответ, но не отображается ниспадающий список Как сортировать по двум значениям, а затем поле ASC в массиве с использованием usort () в PHP? Как использовать SimpleDOM sortedXPath для сортировки по значению узла? PHP – MD5, SHA, Хейшинг-безопасность Неустранимая ошибка: превышено максимальное время выполнения 30 секунд Два оператора mysql_fetch_array в Вызывать функцию PHP из jQuery? Как перебирать и выводить значения объекта массива в Php Избегайте использования isset в PHP при доступе к $ _POST, $ _GET и другим переменным? Возможно ли получить список категорий eBay через API программно? Плагин пользователей CakeDC – как добавить в регистрационную форму поле сведений (т.е. – first_name, company) Отбросить столбец таблицы

Рассчитать количество рабочих дней в месяц

Возможный дубликат:
Получайте количество будних дней в данном месяце

Как рассчитать рабочие дни любого месяца? cal_days_in_month возвращает просто общее количество дней в месяц. Моя задача – рассчитать количество дней в месяце, кроме как по субботам, так и по воскресеньям или воскресеньям. Любой способ найти это?

 function countDays($year, $month, $ignore) { $count = 0; $counter = mktime(0, 0, 0, $month, 1, $year); while (date("n", $counter) == $month) { if (in_array(date("w", $counter), $ignore) == false) { $count++; } $counter = strtotime("+1 day", $counter); } return $count; } echo countDays(2013, 1, array(0, 6)); // 23 

Функция date используется в этом примере. Замечание о параметре игнорирования: 0 – воскресенье, …, 6 – суббота.

копирование второго ответа из: Получить количество будних дней в данном месяце

Вам не нужно подсчитывать каждый день в месяце. Вы уже знаете, что первые 28 дней содержат 20 рабочих дней независимо от того, что. Все, что вам нужно сделать, это определить последние несколько дней. Измените начальное значение на 29. Затем добавьте 20 рабочих дней к возвращаемому значению.

 function get_weekdays($m,$y) { $lastday = date("t",mktime(0,0,0,$m,1,$y)); $weekdays=0; for($d=29;$d<=$lastday;$d++) { $wd = date("w",mktime(0,0,0,$m,$d,$y)); if($wd > 0 && $wd < 6) $weekdays++; } return $weekdays+20; } 

Это должно решить вашу проблему и действительно является эффективным решением.

Простым (не очень элегантным) ответом было бы просто создать отметку времени в первый день месяца, использовать дату (), чтобы получить физическое имя месяца, затем либо переключиться, либо определить, является ли это рабочим днем ​​или нет ,

 $myTime = strtotime("1/1/2013"); // Use whatever date format you want $daysInMonth = cal_days_in_month(CAL_GREGORIAN, 1, 2013); // 31 $workDays = 0; while($daysInMonth > 0) { $day = date("D", $myTime); // Sun - Sat if($day != "Sun" && $day != "Sat") $workDays++; $daysInMonth--; $myTime += 86400; // 86,400 seconds = 24 hrs. } echo "There are $workDays work days this month!"; 

Вывод

 There are 23 work days this month! 

http://php.net/manual/en/function.strtotime.php

http://php.net/manual/en/function.date.php

Просто выполните поиск в Google, мужик.

Для потомков ваш алгоритм:

  • Получите количество дней в месяце, используя дату ().
  • Начиная с дня (1), используйте mktime / gmmktime, чтобы создать временную метку эпохи, а затем используйте date (), чтобы определить, какой день недели она представляет.
  • Повторяйте, пока не найдете первый рабочий день (понедельник). Пусть это будет «i».
  • Пусть текущая величина равна «t», начальное значение которой (0).
  • Пусть j = i. Где j меньше (i + 5) – и меньше, чем максимальное количество дней в месяце, приращение t. Увеличение на (2) (чтобы пропустить выходные дни) и повторить с начала этой строки до тех пор, пока «i» не превысит максимальное количество дней в месяце.
  • Примените успех и счастье, и повторите с начала, пока общее количество рабочих дней (0).
 function countDays($y, $m, $ignore = false) { $result = 0; $loop = strtotime("$y-$m-01"); do if(!$ignore or !in_array(strftime("%u",$loop),$ignore)) $result++; while(strftime("%m",$loop = strtotime("+1 day",$loop))==$m); return $result; } echo countDays(2013,1,array(6,7));//23 echo countDays(2013,2);//28