En este script vamos a ver como sumar días hábiles a una fecha con PHP.
Este script es muy útil para las tiendas online y negocios así que tienen que calcular los tiempos de envío de los productos, y claro con una simple suma de días tienen el problema de encontrar días que no sean hábiles, lo cual retrasa considerablemente el envío y la recepción de los productos.
Sumar días hábiles
En este caso el script para sumar días hábiles sería el siguiente:
function sumasdiasemana($fecha,$dias) { $datestart= strtotime($fecha); $datesuma = 15 * 86400; $diasemana = date('N',$datestart); $totaldias = $diasemana+$dias; $findesemana = intval( $totaldias/5) *2 ; $diasabado = $totaldias % 5 ; if ($diasabado==6) $findesemana++; if ($diasabado==0) $findesemana=$findesemana-2; $total = (($dias+$findesemana) * 86400)+$datestart ; return $fechafinal = date('Y-m-d', $total); } $sumarDias=1; $entre1 = sumasdiasemana(date("Y-m-d"),$sumarDias); echo $entre1 ; |
Cómo puedes ver si cambias la variable $sumarDias por el número que quieras sumará x días hábiles a tu fecha.
En este caso la fecha inicial es la fecha actual que recuperamos con la función date.
Sumar días hábiles y formato de meses en Español
Cómo extra os añado está función que nos cambiará los meses a Español, y nos devolverá dos fechas , para poder conseguir la frase
“Recíbelo en tu casa entre fecha1 y fecha2”
Le sumamos inicialemente 1 día, y después para obtener la fecha final le sumamos otros 2 días (2 días + 1 inicial) , en total serían 3 días.
Y te mostrará la frase siguiente:
“Recíbelo en tu casa entre el día X1 mes Y1 , y el día X2 y mes Y2”
El código sería así:
function sumasdiasemana($fecha,$dias) { $datestart= strtotime($fecha); $datesuma = 15 * 86400; $diasemana = date('N',$datestart); $totaldias = $diasemana+$dias; $findesemana = intval( $totaldias/5) *2 ; $diasabado = $totaldias % 5 ; if ($diasabado==6) $findesemana++; if ($diasabado==0) $findesemana=$findesemana-2; $total = (($dias+$findesemana) * 86400)+$datestart ; return $twstart=date('Y-m-d', $total); } function mes($mes) { if ($mes=="January") $mes="Enero"; if ($mes=="February") $mes="Febrero"; if ($mes=="March") $mes="Marzo"; if ($mes=="April") $mes="Abril"; if ($mes=="May") $mes="Mayo"; if ($mes=="June") $mes="Junio"; if ($mes=="July") $mes="Julio"; if ($mes=="August") $mes="Agosto"; if ($mes=="September") $mes="Setiembre"; if ($mes=="October") $mes="Octubre"; if ($mes=="November") $mes="Noviembre"; if ($mes=="December") $mes="Diciembre"; return $mes; } $date = date("Y-m-d-H"); $sumarDias=1; $entre1 = sumasdiasemana(date("Y-m-d"),$sumarDias); $entre1 = date("d ",$entre1) . mes(date("F",$entre1)) . "\n"; $sumarDias= $sumarDias+2; $entre2 = sumasdiasemana(date("Y-m-d"),$sumarDias); $entre2 = date("d ",$entre2) . mes(date("F",$entre2)) . "\n"; echo "<span style='color:blue;'>Recíbelo en tu casa entre el $entre1 y el $entre2</span>"; |
Sumar días hábiles a partir de una hora
Y finalmente os añado este código en el que si la hora del servidor es mayor que la hora que le he puesto entonces le añada un día más a ambos, ya que si la compra se realiza pasadas x horas no se podrá enviar ese día.
El código sería así:
function sumasdiasemana($fecha,$dias) { $datestart= strtotime($fecha); $datesuma = 15 * 86400; $diasemana = date('N',$datestart); $totaldias = $diasemana+$dias; $findesemana = intval( $totaldias/5) *2 ; $diasabado = $totaldias % 5 ; if ($diasabado==6) $findesemana++; if ($diasabado==0) $findesemana=$findesemana-2; $total = (($dias+$findesemana) * 86400)+$datestart ; return $twstart=date('Y-m-d', $total); } function mes($mes) { if ($mes=="January") $mes="Enero"; if ($mes=="February") $mes="Febrero"; if ($mes=="March") $mes="Marzo"; if ($mes=="April") $mes="Abril"; if ($mes=="May") $mes="Mayo"; if ($mes=="June") $mes="Junio"; if ($mes=="July") $mes="Julio"; if ($mes=="August") $mes="Agosto"; if ($mes=="September") $mes="Setiembre"; if ($mes=="October") $mes="Octubre"; if ($mes=="November") $mes="Noviembre"; if ($mes=="December") $mes="Diciembre"; return $mes; } $date = date("Y-m-d-H"); $hora = date("H"); $sumarDias=1; if ($hora>13){ $sumarDias++; } $entre1 = sumasdiasemana(date("Y-m-d"),$sumarDias); $entre1 = date("d ",$entre1) . mes(date("F",$entre1)) . "\n"; //echo $entre1 ; $sumarDias= $sumarDias+2; $entre2 = sumasdiasemana(date("Y-m-d"),$sumarDias); $entre2 = date("d ",$entre2) . mes(date("F",$entre2)) . "\n"; echo "<span style='color:blue;'>Recíbelo en tu casa entre el $entre1 y el $entre2</span>"; |
Y listo, esto es todo , espero que te haya sido útil.