Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/06/2011, 09:38
andres92
 
Fecha de Ingreso: mayo-2011
Mensajes: 14
Antigüedad: 13 años
Puntos: 1
mejor esta funcion horas habiles

bueno.. el codigo funciona bien .. solo que he mirado qe tarda como 10-20 seg en hacerse la operacion no se que pasa pero si alguien sabe por que . por favor corrijame y coloque su aporte.. graciass...


DEFINE ('ONEMINUTE', 60);

// ESTABLISH THE MINUTES PER DAY FROM START AND END TIMES

$start_time = '08:00:00';
$end_time = '18:00:00';


$start_ts = strtotime($start_time);
$end_ts = strtotime($end_time);
$minutes_per_day = (int)( ($end_ts - $start_ts) / 60 );

// ESTABLISH THE HOLIDAYS
$holidays = array
(
'June 6', // MLK Day
'June 17' // MLK Day

);


// CONVERT HOLIDAYS TO ISO DATES
foreach ($holidays as $x => $holiday)
{
$holidays[$x] = date('Y-m-d', strtotime($holiday));
}

// CHECK FOR VALID DATES
$start = strtotime($fecha_sol);
$end = strtotime($fecha_menor);
$start_p = date('Y-m-d H:i:s', $start);
$end_p = date('Y-m-d H:i:s', $end);

// MAKE AN ARRAY OF DATES
$workdays = array();

// ITERATE OVER THE DAYS
$start = $start - ONEMINUTE;
while ($start < $end)
{
$start = $start + ONEMINUTE;
// ELIMINATE WEEKENDS - SAT AND SUN
$weekday = date('D', $start);
if (substr($weekday,0,1) == 'S') continue;
// ELIMINATE HOURS BEFORE BUSINESS HOURS
$daytime = date('H:i:s', $start);
if(($daytime < date('H:i:s',$start_ts))) continue;
// ELIMINATE HOURS PAST BUSINESS HOURS
$daytime = date('H:i:s', $start);
if(($daytime > date('H:i:s',$end_ts))) continue;
// ELIMINATE HOLIDAYS
$iso_date = date('Y-m-d', $start);
if (in_array($iso_date, $holidays)) continue;
$workminutes[] = $iso_date;

// END ITERATOR
}



//
$number_of_workminutes = (count($workminutes)-1);
$number_of_minutes = number_format($minutes_per_day);
$horas_habiles = number_format($number_of_workminutes/60 ,2);