Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/09/2010, 17:16
Avatar de abimaelrc
abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Intervalo entre varias fechas

Me entretuvo este algoritmo, ¿algo así es lo que quieres?
Código PHP:
Ver original
  1. <?php
  2. function calcDays(){
  3.     if(func_num_args() > 0){
  4.         $dates = array();
  5.  
  6.         foreach(func_get_args() as $value){
  7.             if(is_string($value)){
  8.                 $dates[] = strtotime($value);
  9.             }
  10.             elseif(is_array($value) && count($value) == 1){
  11.                 $dates[] = strtotime($value[0]);
  12.             }
  13.             elseif(is_array($value) && count($value) >= 2){
  14.                 $minNum = strtotime($value[0]) < strtotime($value[1]) ? $value[0] : $value[1];
  15.                 $maxNum = strtotime($value[0]) > strtotime($value[1]) ? $value[0] : $value[1];
  16.                 $dates[] = strtotime($minNum);
  17.                 while(true){
  18.                     $addOne = empty($addOne) ? $minNum : date('Y-m-d', $addOne);
  19.                     $addOne = strtotime('+1 day ' . $addOne);
  20.                     if($addOne >= strtotime($maxNum)){
  21.                         $dates[] = strtotime($maxNum);
  22.                         break;
  23.                     }
  24.                     $dates[] = $addOne;
  25.                 }
  26.                 unset($addOne);
  27.             }
  28.         }
  29.     }
  30.     return empty($dates) ? 0 : count(array_unique($dates));
  31. }
  32.  
  33. echo calcDays(array('2010-09-01', '2010-09-30'), array('2010-09-15', '2010-10-15'), array('2010-07-15', '2010-08-15'), '2010-08-15') . '<br />';
  34. echo calcDays(array('2010-09-01', '2010-09-30'), array('2010-09-15', '2010-10-15'), array('2010-09-15', '2010-10-30')) . '<br />';
  35. echo calcDays(array('2010-09-01', '2010-09-30'), array('2010-10-29', '2010-10-30')) . '<br />';
  36. echo calcDays(array('2010-09-01', '2010-09-30'), array('2010-10-15', '2010-10-30'));
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 24/09/2010 a las 20:59 Razón: Correcciones al código