Escribo este artículo en respuesta a la pregunta que me hicieron de ¿Cómo puedo mostrar los días hábiles en PHP?
Debes Saber:
Para poder hacer este ejercicio debemos tener cierto conocimiento en las funciones de fecha, formato de fecha y arreglos. Los nombres de las funciones de php que estaremos trabajando son date() y date_format(). Asegúrate de que la función trabaje con tu versión de PHP.
Esta es la función de date() y los parámetros que acepta.
string date ( string $format [, int $timestamp = time() ] )
Es muy importante que estudies y utilices de referencia la tabla del formato que puedes utilizar para la fecha. Puedes entrar a página web de la documentación de PHP. No es necesario aprendértelos todos, pero debes conocer algunos que estarás utilizando la mayoría de las veces.
Y = 2015 (año completo)
y = 15 (últimos 2 dígitos del año)
m = 12 (número del mes)
d = 01 (número del día en 2 días)
h = 09 (hora en formato de 12 horas)
i = 30 (minutos con el cero al inicio)
s = 23 (segundos con el cero al inicio)
Aunque no lo mencioné anteriormente, utilicé otra función de php llamada «date_create()» que te permite convertir un «string» (cadena de caracteres) en el formato de fecha y así asignarle el formato que deseas utilizar.
$date = date_create('2015-12-13');
echo date_format($date, 'Y-m-d H:i:s');
La Búsqueda:
Es importante que entiendas siempre existe más de una forma de realizar las cosas, pero lo que buscamos es que podamos tener un código que sea re-utilizable, o sea, pasar el trabajo una vez. Sea que te sientes a programar el código tu mismo, o hagas una búsqueda en la internet, es tiempo que se te resta de la fecha final del proyecto.
Así que debemos volvernos expertos en decidir qué momentos, programar y qué momentos hacer la búsqueda en internet, ya que existen un sin número de ejemplos de pequeños pedazos de códigos que nos pueden servir para nuestro proyecto, pero debemos saber leer e interpretar el mismo.
El Código:
Este código lo tomé de https://eval.in/90006 y me pareció muy acertado para responder a la pregunta que me hicieron. Al ser una función nos permite aplicarlo de manera sencilla.
function number_of_working_dates($from, $days) {
$workingDays = [1, 2, 3, 4, 5]; # date format = N (1 = Monday, ...)
$holidayDays = ['*-12-25', '*-01-01', '2013-12-24', '2013-12-25']; # variable and fixed holidays
$from = new DateTime($from);
$dates = [];
$dates[] = $from->format('Y-m-d');
while ($days) {
$from->modify('+1 day');
if (!in_array($from->format('N'), $workingDays)) continue;
if (in_array($from->format('Y-m-d'), $holidayDays)) continue;
if (in_array($from->format('*-m-d'), $holidayDays)) continue;
$dates[] = $from->format('Y-m-d');
$days--;
}
return $dates;
}
print_r( number_of_working_dates('2015-12-23', 10) );
Le añadí algunas otras líneas para que pudieran ver cómo se puede utilizar un código base para desarrollar lo que deseamos.
$dates = number_of_working_dates('2015-12-23', 10); //Arreglo del resultado de las fechas
foreach ( $dates as $date ) {
$fecha = date_create($date); //Convertir 'string' a formato de fecha
echo($date . ' - ' . $fecha->format('D') . '
');
//Muestro los formatos que deseo (fecha y el día)
}
//Aquí puedo seleccionar el día deseado
$fecha = date_create($dates[0]);
//echo( ''.$dates[0] . ' - ' . date_format($fecha, 'D') . ''); //Método tradicional
echo( ''.$dates[0] . ' - ' . $fecha->format('D') . ''); //Orientado a objeto
Resultado final:
Este es el resultado final del código completo para que lo puedan utilizar.
function number_of_working_dates($from, $days) {
$workingDays = [1, 2, 3, 4, 5]; # date format = N (1 = Monday, ...)
$holidayDays = ['*-12-25', '*-01-01', '2013-12-24', '2013-12-25']; # variable and fixed holidays
$from = new DateTime($from);
$dates = [];
$dates[] = $from->format('Y-m-d');
while ($days) {
$from->modify('+1 day');
if (!in_array($from->format('N'), $workingDays)) continue;
if (in_array($from->format('Y-m-d'), $holidayDays)) continue;
if (in_array($from->format('*-m-d'), $holidayDays)) continue;
$dates[] = $from->format('Y-m-d');
$days--;
}
return $dates;
}
//print_r( number_of_working_dates('2015-12-23', 10) );
$dates = number_of_working_dates('2015-12-23', 10);
foreach ( $dates as $date ) {
$fecha = date_create($date);
echo($date . ' - ' . $fecha->format('D') . '
');
}
$fecha = date_create($dates[0]);
//echo( ''.$dates[0] . ' - ' . date_format($fecha, 'D') . '');
echo( ''.$dates[0] . ' - ' . $fecha->format('D') . ''); //orientado a objetos
Lo Próximo:
Luego tomaré un tiempo para crear un video que muestre cómo se hace todo, ya que hay muchas personas que se les hace más fácil aprender cuando lo ven. Saludos y hasta la próxima.
Referencias: