← на главную
Нашли ошибку? Сообщите, пожалуйста, о ней. Выделите ошибку и нажмите ctrl+enter.

Дневник — зеркало души

   читать: всё сразу по категориям поиск

   подписаться на рассылку: рассылка по email Twitter

11 августа 2009 в 13:41
Количество будних дней в месяце
Сегодня пришлось столкнуться с задачей определения количества будних дней в месяце. Поиск по интернету мне ничего не дал, поэтому пришлось писать функцию самому. И вот что у меня получилось:
   

//$month — номер месяца в году (от 1 до 12)
//$year — номер года (например 2009)
//$day — необязательный параметр. Если задан, то количество будних дней считается, начиная с этого дня.
function count_ferial_days($month$year$day 1)
{
    
$str $year."-".$month."-".$day;
    
$count_days =  date('t'strtotime($str)); //всего дней в этом месяце
    
    
$result 0;
    for(
$day;$day<=$count_days;$day++)
    {
        
$str $year."-".$month."-".$day;
        
$cur_day =  date('w'strtotime($str)); // узнаём текущий день
        
if ($cur_day == || $cur_day == 6//Если это суббота или воскресение, то пропускаем.
            
continue;
        
$result++;
    }
    
    return 
$result;
}
    
//Пример работы
echo count_ferial_days(82009); // 22
echo count_ferial_days(8200911); // 15
?>


   
   Надеюсь, кому-то пригодится.

знания   |   15 комментариев    |   следить за комментариями
|
|
← Зачем вам много денег?Минск →
 
Комментарии:
Гость( 12 августа 2009 в 21:01 )

   На нужнике было нечем заняться, написал функцию, делающую то же самое в константное время.
   
   function workday_count($month, $year)
   {
    //$weekday 0 = Sun 1 = Mon ...
   
    list($weekday,$total_days) = explode(' ',date('w t',mktime(0,0,0,$month,1,$year)));
   
    $days_without_1st_incomplete_week = $total_days — (7-$weekday);
    $workdays_in_1st_incomplete_week = 6 — $weekday;
   
    $workdays_in_complete_weeks = floor($days_without_1st_incomplete_week / 7) * 5;
   
    $days_in_last_week = $days_without_1st_incomplete_week % 7;
   
    $workdays_in_last_week = $days_in_last_week ? $days_in_last_week — 1: 0;
   
    return $workdays_in_1st_incomplete_week + $workdays_in_complete_weeks + $workdays_in_last_week;
   }
   
   P.S. ferial — обыденный, а будний день — workday
   
   -- leonid.shevtsov.me
   echo workday_count(8,2009); //=21

Гость( 12 августа 2009 в 21:06 )

   чтоб не с первого дня месяца...
   
   list($weekday,$total_days) = explode(' ',date('w t',mktime(0,0,0,$month,$day,$year)));
   $total_days -= $day-1;
   
   --leonid.shevtsov.me

Гость( 12 августа 2009 в 21:16 )

   И если еще подумать, она вернет количество будней для ваще любого промежутка времени.
   
   И все равно обе функции — отстой, потому что ничего не знают о праздниках.
   
   --leonid.shevtsov.me

DmbITpo( 12 августа 2009 в 23:40 )

   В принципе можно и мою функцию додумать, добавить день, до которого считать и тогда можно тоже любой промежуток задать...

Гость( 14 августа 2009 в 18:21 )

   Кстати http://habrahabr.ru/blogs/php/67092/

автор ответил:

   да уж =)) 150 просмотров этого поста было сделано именно с Хабра =) вот такой вот Хабраэффект

Гость( 25 декабря 2011 в 19:11 )

   Сайт посвященный любви и романтике!

Гость( 29 мая 2012 в 17:33 )

   помогли бы мне...(

Гость( 5 июля 2012 в 11:41 )

   спасибо!

Гость( 21 ноября 2012 в 10:23 )

   уджас:))))))

Гость( 7 декабря 2012 в 01:49 )

   мудаки! вам нечем больше заняться?

 
Добавить комментарий:

Вы можете войти под своим именем или просто написать комментарий от имени Гость.

Сколько будет девятью шесть?

следить за комментариями к этой записи