Foros del Web » Programando para Internet » PHP »

Cambiar formato fecha para contar dias habiles

Estas en el tema de Cambiar formato fecha para contar dias habiles en el foro de PHP en Foros del Web. Hola!, necesito contar los días habiles, descontando fechas festivas. Pues encontré un script php que lo hace perfecto! pero mi problema es que este script ...
  #1 (permalink)  
Antiguo 13/02/2013, 18:24
 
Fecha de Ingreso: junio-2012
Ubicación: Santiago, Chile
Mensajes: 20
Antigüedad: 11 años, 9 meses
Puntos: 0
Cambiar formato fecha para contar dias habiles

Hola!, necesito contar los días habiles, descontando fechas festivas. Pues encontré un script php que lo hace perfecto! pero mi problema es que este script lee las fechas como dia mes año, y yo las tengo almacenadas en mysql como año, mes, dia.

Lo que necesito es modificar el script, pero no lo he logrado. Por favor, si me pudieran ayudar a que el script pueda leer fechas como año mes dia, se los agradeceré mucho!. El script lo saqué del blog de felipe-pena.

Código PHP:
<?php

//1.- Pasar la fecha inicial y final a maketime y obtener un arreglo con todas los días intermedios.

function DiasHabiles($fecha_inicial,$fecha_final

list(
$dia,$mes,$year) = explode("-",$fecha_inicial); 
$ini mktime(000$mes $dia$year); 
list(
$diaf,$mesf,$yearf) = explode("-",$fecha_final); 
$fin mktime(000$mesf $diaf$yearf); 

$r 1
while(
$ini != $fin

$ini mktime(000$mes $dia+$r$year); 
$newArray[] .=$ini;  
$r++; 

return 
$newArray
}



//2.- Una función que evalué el arreglo de fechas obtenido, que contenga los feriados nacionales que correspondan (restando) y que reste los sábados y domingos.

function Evalua($arreglo

$feriados        = array( 
'1-1',  //  Año Nuevo (irrenunciable) 
'10-4',  //  Viernes Santo (feriado religioso) 
'11-4',  //  Sábado Santo (feriado religioso) 
'1-5',  //  Día Nacional del Trabajo (irrenunciable) 
'21-5',  //  Día de las Glorias Navales 
'29-6',  //  San Pedro y San Pablo (feriado religioso) 
'16-7',  //  Virgen del Carmen (feriado religioso) 
'15-8',  //  Asunción de la Virgen (feriado religioso) 
'18-9',  //  Día de la Independencia (irrenunciable) 
'19-9',  //  Día de las Glorias del Ejército 
'12-10',  //  Aniversario del Descubrimiento de América 
'31-10',  //  Día Nacional de las Iglesias Evangélicas y Protestantes (feriado religioso) 
'1-11',  //  Día de Todos los Santos (feriado religioso) 
'8-12',  //  Inmaculada Concepción de la Virgen (feriado religioso) 
'13-12',  //  elecciones presidencial y parlamentarias (puede que se traslade al domingo 13) 
'25-12',  //  Natividad del Señor (feriado religioso) (irrenunciable) 
); 

$jcount($arreglo); 

for(
$i=0;$i<=$j;$i++) 

$dia $arreglo[$i]; 

        
$fecha getdate($dia); 
            
$feriado $fecha['mday']."-".$fecha['mon']; 
                    if(
$fecha["wday"]==or $fecha["wday"]==6
                    { 
                        
$dia_ ++; 
                    } 
                        elseif(
in_array($feriado,$feriados)) 
                        {    
                            
$dia_++; 
                        } 

$rlt $j $dia_
return 
$rlt
}



//3.- Se llama a las funciones.
$CantidadDiasHabiles Evalua(DiasHabiles('19-10-2010','28-12-2010')); 

echo   
$CantidadDiasHabiles;

?>
  #2 (permalink)  
Antiguo 13/02/2013, 18:39
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 13 años, 11 meses
Puntos: 461
Respuesta: Cambiar formato fecha para contar dias habiles

tu puedes traer tu fecha de la base de datos en el formato que desees, busca acerca de la funcion DATE_FORMAT de mysql y te aseguro que encontraras solución
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 14/02/2013, 16:42
 
Fecha de Ingreso: junio-2012
Ubicación: Santiago, Chile
Mensajes: 20
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Cambiar formato fecha para contar dias habiles

Cita:
Iniciado por carlos_belisario Ver Mensaje
tu puedes traer tu fecha de la base de datos en el formato que desees, busca acerca de la funcion DATE_FORMAT de mysql y te aseguro que encontraras solución
Muchas gracias por responder. Si sé que puedo hacerlo con dateformat, pero mi idea es aprender y me gustaría sabér como modificar este codigo que esta genial... si pudieran ayudarme se los agradeceria.
  #4 (permalink)  
Antiguo 14/02/2013, 17:34
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 13 años, 11 meses
Puntos: 461
Respuesta: Cambiar formato fecha para contar dias habiles

que es lo que no sabes?? porque lo ideal en el papel de la función es que le pases el formato como te lo pide la función, quieres cambiarla?? pues simplemente modifica ensayo y error, realmente lo que dices no esta nada difícil, el punto de inicio debería de ser esta linea
Código php:
Ver original
  1. list($dia,$mes,$year) = explode("-",$fecha_inicial);

de ahí te lo dejo para que lo hagas tu mismo y aprendas un poco
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 14/02/2013, 17:49
 
Fecha de Ingreso: junio-2012
Ubicación: Santiago, Chile
Mensajes: 20
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Cambiar formato fecha para contar dias habiles

Cita:
Iniciado por carlos_belisario Ver Mensaje
que es lo que no sabes?? porque lo ideal en el papel de la función es que le pases el formato como te lo pide la función, quieres cambiarla?? pues simplemente modifica ensayo y error, realmente lo que dices no esta nada difícil, el punto de inicio debería de ser esta linea
Código php:
Ver original
  1. list($dia,$mes,$year) = explode("-",$fecha_inicial);

de ahí te lo dejo para que lo hagas tu mismo y aprendas un poco
Exactamente hice eso-.,modifiqué las siguientes lineas:
Código PHP:
list($dia,$mes,$year) = explode("-",$fecha_inicial); 
list(
$diaf,$mesf,$yearf) = explode("-",$fecha_final); 
por
Código PHP:
list($year,$mes,$dia) = explode("/",$fecha_inicial); 
list(
$yearf,$mesf,$diaf) = explode("/",$fecha_final); 
Pero no funcionó... y estuve cambiando varias otras cosas más pero nada... por eso no estoy seguro qué estoy haciendo.
  #6 (permalink)  
Antiguo 14/02/2013, 17:57
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 13 años, 11 meses
Puntos: 461
Respuesta: Cambiar formato fecha para contar dias habiles

pues lo primero que debes hacer es verificar en que formato estas pasando el string con la fecha, porque la fecha que viene de mysql es yyyy-mm-dd no yyyy/mm/dd, una vez veas eso, deberías por debugear imprimir lo que contienen las variables $year,$mes,$dia, para ver el porque no esta funcionando correctamente el script
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #7 (permalink)  
Antiguo 14/02/2013, 18:26
 
Fecha de Ingreso: junio-2012
Ubicación: Santiago, Chile
Mensajes: 20
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Cambiar formato fecha para contar dias habiles

Cita:
Iniciado por carlos_belisario Ver Mensaje
pues lo primero que debes hacer es verificar en que formato estas pasando el string con la fecha, porque la fecha que viene de mysql es yyyy-mm-dd no yyyy/mm/dd, una vez veas eso, deberías por debugear imprimir lo que contienen las variables $year,$mes,$dia, para ver el porque no esta funcionando correctamente el script
Muchas gracias!!!... estaba haciendolo bien, lo unico que me faltaba era cambiar / por - y nada más... Busqué las más dificiles soluciones, y nunca me imaginé en ver esto.

Muchas gracias! Y si a alguien le sirve el codigo, funciona perfecto para calcular dos fechas y traer la cantidad de días laborales, excluyendo los días feriados.

Muchas gracias!

Etiquetas: dias, fecha, formato, habiles, mysql
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 18:12.