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

Я хочу рассчитать количество дней в будние дни в месяц и год. Дни недели означают понедельник до пятницы. Как мне это сделать ?

Solutions Collecting From Web of "Получайте количество будних дней в данном месяце"

Некоторые базовые коды:

$month = 12; $weekdays = array(); $d = 1; do { $mk = mktime(0, 0, 0, $month, $d, date("Y")); @$weekdays[date("w", $mk)]++; $d++; } while (date("m", $mk) == $month); print_r($weekdays); 

Удалите @ если в вашем предупреждении об ошибке PHP не отображаются уведомления.

Вам не нужно подсчитывать каждый день в месяце. Вы уже знаете, что первые 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; } 

Попробуй это

 function getWeekdays($m, $y = NULL){ $arrDtext = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri'); if(is_null($y) || (!is_null($y) && $y == '')) $y = date('Y'); $d = 1; $timestamp = mktime(0,0,0,$m,$d,$y); $lastDate = date('t', $timestamp); $workingDays = 0; for($i=$d; $i<=$lastDate; $i++){ if(in_array(date('D', mktime(0,0,0,$m,$i,$y)), $arrDtext)){ $workingDays++; } } return $workingDays; } 

вы можете проверить информацию здесь http://www.technoreaders.com/2011/12/06/php-get-number-of-weekdays-in-month/

Это самый простой код, который я мог бы придумать. Вам действительно нужно создать массив или таблицу базы данных, чтобы провести праздники, чтобы получить истинный счет «Рабочие дни», но это было не то, что было задано, поэтому здесь вы идете, надеюсь, что это поможет кому-то.

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

Метод DateObject:

 function getWorkingDays(DateTime $date) { $month = clone $date; $month->modify('last day of this month'); $workingDays = 0; for ($i = $month->format('t'); $i > 28; --$i) { if ($month->format('N') < 6) { ++$workingDays; } $month->modify('-1 day'); } return 20 + $workingDays; } 

Рассчитать рабочие дни в месяц с любой даты:

 public function getworkd($mday) { $dn = new DateTime($mday); $dfrom = $dn->format('Ym-01'); $dtill = $dn->format('Ym-t'); $df = new DateTime($dfrom); $dt = new DateTime($dtill); $wdays = 0; while($df<=$dt) { $dof= $df->format('D') ; if( $dof == 'Sun' || $dof == 'Sat' ) ; else $wdays++; $df->add(new DateInterval('P1D')); } return $wdays; } в public function getworkd($mday) { $dn = new DateTime($mday); $dfrom = $dn->format('Ym-01'); $dtill = $dn->format('Ym-t'); $df = new DateTime($dfrom); $dt = new DateTime($dtill); $wdays = 0; while($df<=$dt) { $dof= $df->format('D') ; if( $dof == 'Sun' || $dof == 'Sat' ) ; else $wdays++; $df->add(new DateInterval('P1D')); } return $wdays; } 

Найдите последний день и будний день за данный месяц
затем выполните простой цикл while: –

 $dates = explode(',', date('t,N', strtotime('2013-11-01'))); $day = $dates[1]; $tot = $dates[0]; $cnt = 0; while ($tot>1) { if ($day < 6) { $cnt++; } if ($day == 1) { $day = 7; } else { $day--; } $tot--; } 

$ cnt = общий день недели (с понедельника по пятницу) за данный месяц

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

Пример использования:

 echo number_of_working_days('2013-12-23', '2013-12-29'); 

Вывод:

 3 

Ссылка на функцию

это будет работать

 // oct. 2013 $month = 10; // loop through month days for ($i = 1; $i <= 31; $i++) { // given month timestamp $timestamp = mktime(0, 0, 0, $month, $i, 2012); // to be sure we have not gone to the next month if (date("n", $timestamp) == $month) { // current day in the loop $day = date("N", $timestamp); // if this is between 1 to 5, weekdays, 1 = Monday, 5 = Friday if ($day == 1 OR $day <= 5) { // write it down now $days[$day][] = date("j", $timestamp); } } } // to see if it works :) print_r($days);