Dadas dos fechas, ¿cuál es la mejor manera de encontrar el número de días laborables en PHP?

StackOverflow https://stackoverflow.com/questions/80541

  •  09-06-2019
  •  | 
  •  

Pregunta

El título se explica por sí solo.Dadas dos fechas, ¿cuál es la mejor manera de encontrar el número de días de la semana usando PHP?Los días laborables son de lunes a viernes.

Por ejemplo, ¿cómo puedo saber que hay 10 días entre semana? 31/08/2008 y 13/09/2008?

¿Fue útil?

Solución

        $datefrom = strtotime($datefrom, 0);
        $dateto = strtotime($dateto, 0);

        $difference = $dateto - $datefrom;

        $days_difference = floor($difference / 86400);
        $weeks_difference = floor($days_difference / 7); // Complete weeks

        $first_day = date("w", $datefrom);
        $days_remainder = floor($days_difference % 7);

        $odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder?
        if ($odd_days > 7) { // Sunday
            $days_remainder--;
        }
        if ($odd_days > 6) { // Saturday
            $days_remainder--;
        }

        $datediff = ($weeks_difference * 5) + $days_remainder;

De aquí: http://www.addedbytes.com/php/php-datediff-function/

Otros consejos

Si estás creando un sistema de facturación, tienes que pensar en los días festivos, Semana Santa, etc.No es sencillo calcularlo.

La mejor solución que he visto es pregenerar una tabla con días y su tipo en la base de datos SQL (fila por día = 365 filas por año) y luego realizar una consulta de recuento simple con la selección adecuada (cláusula WHERE).

Puede encontrar esta solución completamente descrita en El pensamiento de Joe Celko en conjuntos:Tablas auxiliares, temporales y virtuales en SQL

Una forma sería convertir las fechas a marcas de tiempo Unix usando strtotime(...), restando los resultados y dividiendo con 86400 (24*60*60):

$dif_in_seconds = abs(strtotime($a) - strtotime($b));
$daysbetween = $dif_in_seconds / 86400;

Hora estimada de llegada:Oh..Te referías a los días laborables como de lunes a viernes.No lo vi al principio...

La mejor manera es recorrer todas las fechas entre el rango de fechas dado y obtener el día de la semana para cada fecha.Si es un día laborable, incremente un determinado contador.Al final del proceso obtienes el número de días laborables.

Las funciones PHP mktime() y date() (para trabajar con marcas de tiempo UNIX) son tus amigas aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top