Foros del Web » Programando para Internet » PHP »

Sumar días hábiles en PHP

Estas en el tema de Sumar días hábiles en PHP en el foro de PHP en Foros del Web. Buenas espero que me puedan ayudar estoy queriendo sumar 10 días hábiles (Lunes a Viernes) y sin contar feriados a partir de una fecha Lo ...
  #1 (permalink)  
Antiguo 28/11/2015, 10:10
 
Fecha de Ingreso: noviembre-2015
Mensajes: 21
Antigüedad: 8 años, 5 meses
Puntos: 0
Sumar días hábiles en PHP

Buenas espero que me puedan ayudar
estoy queriendo sumar 10 días hábiles (Lunes a Viernes) y sin contar feriados
a partir de una fecha
Lo que hecho es sumarle 10 días pero no quiero que cuente los sábados ni domingos y tampoco los feriados

Por ejemplo estos son algunos feriados

2015-12-08 2015-12-25 2016-01-01


<?php

require_once('conexion.php');

$num_accion=$_POST['num_accion'];
$fecha_noti=$_POST['fecha_noti'];

$fecha_venci_noti= date("Y-m-d", strtotime("$fecha_noti + 10 days"));

$sql="update tbldias set

dc_fecha_noti='".$fecha_noti."',
dc_fecha_venci_noti='".$fecha_venci_noti."'

where dc_num_accion=".$num_accion;

$res=mysql_query($sql,$cnx);

?>
  #2 (permalink)  
Antiguo 28/11/2015, 13:46
 
Fecha de Ingreso: octubre-2015
Ubicación: España
Mensajes: 21
Antigüedad: 8 años, 6 meses
Puntos: 6
Respuesta: Sumar días hábiles en PHP

Hola,

He hecho una herramienta con una micro base de datos hecha en un simple array con las fechas festivas y otro con los días de la semana que debe saltar (0 y 6; domingo y sábado). Es una simple idea para que tengas en cuenta como poder desarrollarlo, es muy simple, he comentado las lineas para que puedas entender las variables de configuración y un poco el proceso pero si no te queda claro, o tienes alguna duda, no dudes en consultar!!

Código PHP:
<?php
    date_default_timezone_set
("Europe/Madrid");
    
// Guardamos en una variable los dias festivos en varios arrays con formato
    // $dias_festivos[año][mes] = [dias festivos];
    
$dias_festivos = array(
        
"2015"=>array(12 => [3,4,5,25,31]),
        
"2016"=>array(=> [1,6])
    );
    
$dias_saltados = array(0,6); // 0: domingo, 1: lunes... 6:sabado
    // dias a sumar
    
$dias $dias_origin 10;
    
// dias que el programa ha contado
    
$dias_contados 0;
    
// timestamp actual
    
$time time();
    
// duracion (en segundos) que tiene un día
    
$dia_time 3600*24//3600 segundos en una hora * 24 horas que tiene un dia.


    
function esFestivo($time) {
        global 
$dias_saltados;
        global 
$dias_festivos;

        
$w date("w",$time); // dia de la semana en formato 0-6
        
if(in_array($w$dias_saltados)) return true;
        
$j date("j",$time); // dia en formato 1 - 31
        
$n date("n",$time); // mes en formato 1 - 12
        
$y date("Y",$time); // año en formato XXXX
        
if(isset($dias_festivos[$y]) && isset($dias_festivos[$y][$n]) && in_array($j,$dias_festivos[$y][$n])) return true;

        return 
false;
    }
    
    
    while(
$dias != 0) {
        
$dias_contados++;
        
$tiempoContado $time+($dia_time*$dias_contados); // Sacamos el timestamp en la que estamos ahora mismo comprobando
        
if(esFestivo($tiempoContado) == false)
            
$dias--;
    }
    echo 
"El programa ha recorrido ".$dias_contados." (ha saltado ".($dias_contados-$dias_origin).") hasta llegar la fecha que deseabas:".PHP_EOL
        
.date("D, d/m/Y",$tiempoContado);
    echo 
PHP_EOL;


?>
Un saludo!
  #3 (permalink)  
Antiguo 29/11/2015, 16:54
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 15 años, 7 meses
Puntos: 36
Respuesta: Sumar días hábiles en PHP

En este post, http://www.forosdelweb.com/f18/como-...fechas-851895/ tienes como contar dias, ignorando los sabados y domingos, tomalocomo referencia.

Saludos,
  #4 (permalink)  
Antiguo 01/12/2015, 18:39
 
Fecha de Ingreso: noviembre-2015
Mensajes: 21
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Sumar días hábiles en PHP

Bueno aquí es donde se guarda edita_comunica.php
el formulario esta en otro archivo
lo que pasa es que una vez que se registra
--> fecha_noti_comu
la --> fecha_venci_not_comu se guarda sumando 10 días pero quiero que sean días hábiles de los Lunes a Viernes y sin contar los feriados
por ejemplo estos son algunos feriado
-2015-12-08
-2015-12-25
-2016-01-01
Podrias ayudarme para saber como podría ser el codigo

edita_comunica.php

Código PHP:
<?php

require_once('conexion.php');

$num_accion=$_POST['num_accion'];
$fecha_comunicacion=$_POST['fecha_comunicacion'];
$num_comunicacion=$_POST['num_comunicacion'];
$fecha_noti_comu=$_POST['fecha_noti_comu'];
$estado=$_POST['estado'];

$fecha_venci_not_comudate("Y-m-d"strtotime("$fecha_noti_comu + 10 days"));

$dependencia=$_POST['dependencia'];
$traslado=$_POST['traslado'];

$sql="update tbldocumentosicr set icr_dependencia='".$dependencia."',icr_fecha_comunicacion='".$fecha_comunicacion."',icr_num_comunicacion='".$num_comunicacion."',

icr_fecha_noti_comu='"
.$fecha_noti_comu."',icr_estado='".$estado."',icr_fecha_venci_not_comu='".$fecha_venci_not_comu."',

icr_dependencia='"
.$dependencia."',icr_traslado='".$traslado."'

where icr_num_accion="
.$num_accion;

$res=mysql_query($sql,$cnx);

?>

Etiquetas: fecha, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:22.