Diferencia de tiempo entre fechas

Como parte del utilitario de Ligne existe la clase llamada TimeDiff para realizar cálculos de diferencia de tiempo entre fechas;

    
 //Hacemos uso de la clase
 use TimeDifference\TimeDiff;

 //Creamos una instancia de la clase
 $new_time = new TimeDiff('2018-10-12','2018-10-15');

 //Obtenemos su resultados y lo mostramos por pantalla
 var_dump($new_time->timeDiff());
    

Esto retorna un arreglo asociativo como el siguiente;

    
 array (size=5)
  'total_days' =>
    array (size=2)
      0 => string '12' (length=2)
      1 => string '15' (length=2)
  'first_day_time' => int 61200
  'last_day_time' => int 61200
  'timeDiff' => int 122400
  'total_time' => int 0
    

total_days Es el total de los días que pasaron entre las 2 fechas.

First_day_time Es el total de segundos que existe en el primer día.

last_day_time Es el total de segundos que existe en el último día.

timeDiff Es el total de tiempo en segundos que existe entre las 2 fechas.

Consideraciones

Hay algunas cosas a considerar en este ejemplo y es que a la hora de instanciar la clase se deben especificar algunos datos como parámetro;

$start_dateFecha inicial.

$end_dateFecha Final.

$start_work_hour Hora de inicio de la jornada, por defecto es 8:00:00.

$end_work_hour Hora de fin de jornada, por defecto es 17:00:00.

Estos 2 parámetros se refieren en caso de que se deban de tomar en consideración horas no hábiles dentro de la diferencia de tiempo, si se quiere tener la diferencia neta estos dos valores deben ser especificados de la siguiente manera 00:00:00 y 23:59:59 respectivamente.

$hours_per_day cantidad de horas por día.

En caso que las fechas superen los 2 días y se pretenda obtener tiempo hábil, por ejemplo, en una jornada laboral de 8:00:00 a 17:00:00 las horas hábiles son 8, se dio el rango de 2018-10-15 a 2018-10-18 el resultado es;

    
 $new_time = new TimeDiff('2018-10-15','2018-10-18','08:00:00','17:00:00',8);
    
                        
 array (size=5)
  'total_days' =>
    array (size=4)
      0 => string '15' (length=2)
      1 => string '16' (length=2)
      2 => string '17' (length=2)
      3 => string '18' (length=2)
  'first_day_time' => int 61200
  'last_day_time' => int 61200
  'timeDiff' => int 180000
  'total_time' => int 57600
                        
                    

Tenemos que han pasado 4 días entre estas fechas y un tiempo total transcurrido entre ellas.

Días de semana hábiles

Otra facilidad que tiene esta clase es que le puedes especificar cuáles son los días hábiles en la semana, por ejemplo, de lunes a viernes. Esto es gracias a un array que recibe 2 posiciones;

$work_days = array(dia_inicio,dia_final);

Por defecto estos están establecidos en 1 y 5 respectivamente y significa que el lunes (1) es el primer día hábil y viernes (5) es el último día hábil por lo que restan el 6(sábado) y 7(domingo).

    
 $new_time = new TimeDiff('2018-10-15',
                          '2018-10-18',
                          '08:00:00',
                          '17:00:00',
                          8,
                          array(1,5)
  );
    

Por último, También recibe un arreglo como parámetro para los días festivos.