среда, 26 декабря 2012 г.

ого...

Как же я давно сюда не заходил! Последний раз был я тут.. ого.. 29 сентября. Ну, жаловаться на время, я думаю, не стоит. Ведь когда захотел - вроде как и нашел. В общем-то готовлюсь к диплому.
Решил отписаться здесь, так как думаю с небольшой но все же проблемой этой сталкивалось большинство.
Суть: приперло мне по работе узнать количество рабочих дней в php, как ни странно, ни 1 встроенной функции не нашел (от зараза... ) , решил не унывать и пошел щупать гуглю. После тесного общения с оной нифига вразумительного не нашел, лишь пару человеков намекали на то, как можно реализовать сию штуковину, то есть, функцию по рассчету.
В общем, мой моск решил сию задачу, возможно даже верно, код нижее:

/**
* Считает рабочие дни недели (без учета праздников, т.е убирает выходные)
* @cdays(int) - количество дней до нужной даты
* количество рабочих дней(int)
**/
function WorkDays($cdays)
{
 if($cdays<0)
 {
  $koef =-1;
  $cdays=abs($cdays);
 }
 else
  $koef =1;
  
 $weekends = floor($cdays/7)*2; //выходные с целых недель в сроке
 $freeDay = $cdays%7; //кол-во дней, недотянувшее до целой недели
 $cdays-=($weekends+$freeDay); //вычитаем точно известные выходные и вычитаем все "пока лишние" дни
 
 
 if ($freeDay>0)//если есть свободные дни
 {
  $nownum = @date('w'); //номер дня недели(сегодняшнего), как точка отсчета
  $all = $nownum+$freeDay; //сегодняшний день недели + кол-во дней
  if ($all-7 >= 0) //если во время срока точно есть выходные
   $freeDay-=2;
  elseif($all-6 >=0)
   $freeDay--;
  $cdays+=$freeDay; 
 }
 return $cdays*$koef;
}
Сопсно, получилось вот такое вот чудо, не знаю, насколько оно верно буит отрабатывать у кого - то, у меня она пока работает как надо. если кто-то найдет ошибку, оч прошу сообщить :) За сим пока откланиваюсь, но обещаю появляться почаще.