Petar Nedyalkov escribió:
On Wednesday 27 April 2005 09:17, Mario de Frutos Dieguez wrote:
Hi!
I have a problem with dates. I have a function that sum a duration in
laboral days to an initial date. The problem come when the function
reaches the last sunday of October, the data remains in the last sunday
of October and make an infinite loop. The functions works fine i have
test in all the cases and only fails in the last sunday of October.
So, let's see the function.
Can anyone help me?
Thanks in advance.
PD: Jochem home english is bad english :P
--
Mario de Frutos Dieguez
División de Ingeniería del Software
y Comunicaciones
CARTIF -Parque Tecnológico Boecillo
function aCalculaFechas($oSqlBDGestion,$fecFechaIniProyecto,$iDuracion)
{
$iCont=0;
//Descomponemos los argumentos y pasamos las fechas a
formato Y/m/d
$aFecIniTemp=split(/,$fecFechaIniProyecto);
$fecFechaInicio=date(Y/m/d,mktime(0,0,0,$aFecIniTemp[1],$aFecIniTemp[0],$aFecIniTemp[2]));
if ($iDuracion0)
{
//Generamos una fecha temporal sobre la que haremos los
cálculos
$fecFechaFinTemp=$fecFechaInicio;
//Sumamos uno a la fecha para iniciar la cuenta de la
duración un día despues de la fecha de inicio
$fecFechaFinTemp=$this-SumarFechas($fecFechaFinTemp,1);
//Ejecutamos un bucle que irá calculando la duración
total (incluyendo sabados y domingos) a partir de la duración
//laboral
while ($iCont($iDuracion))
{
//Obtenemos el día de la semana del día que estamos
mirando
$aFecTempCalculo=split('/',$fecFechaFinTemp);
$iDiaSemanaTemp=date(w,mktime(0,0,0,$aFecTempCalculo[1],$aFecTempCalculo[2],$aFecTempCalculo[0]));
//Si el día es distinto de domingo o sabado
aumentamos el contador de duración laboral
if ($iDiaSemanaTemp!=6 $iDiaSemanaTemp!=0)
{
$iCont++;
}
//Se añade uno más a la fecha
$fecFechaFinTemp=$this-SumarFechas($fecFechaFinTemp,1);
//Siempre se añade uno al número de días totales.
$iNumDiasTotales++;
//echo $iNumDiasTotales.'br';
}
//Sumamos al a fecha temporal el número de dias totales
(solo incluidos sabados y domingos)
$fecFechaFinTemp=$this-SumarFechas($fecFechaInicio,$iNumDiasTotales);
//Hacemos un bucle obteniendo los días festivos usando
la fecha final temporal y hasta que no se obtengan dias
//festivos sigue sumandolos.
do
{
//echo SELECT * FROM festivos WHERE dia_festivo
BETWEEN '.$fecFechaInicio.' AND '.$fecFechaFinTemp.';
//Obtenemos los dias festivos entre el rango de fechas
$iObtenDiasFest=$oSqlBDGestion-iEjecutarConsulta(SELECT * FROM
festivos WHERE dia_festivo BETWEEN '.$fecFechaInicio.' AND
'.$fecFechaFinTemp.');
$iNumDiasFestivos=$oSqlBDGestion-iNumeroFilasResultadoConsulta($iObtenDiasFest);
$fecFechaInicio=$this-SumarFechas($fecFechaFinTemp,1);
$fecFechaFinTemp=$this-SumarFechas($fecFechaFinTemp,$iNumDiasFestivos);
}while ($iNumDiasFestivos0);
$aFecTempCalculo=split('/',$fecFechaFinTemp);
$iDiaSemanaTemp=date(w,mktime(0,0,0,$aFecTempCalculo[1],$aFecTempCalculo[2],$aFecTempCalculo[0]));
if ($iDiaSemanaTemp==6)
$fecFechaFin=$this-SumarFechas($fecFechaFinTemp,3);
else if ($iDiaSemanaTemp==0)
$fecFechaFin=$this-SumarFechas($fecFechaFinTemp,2);
else
$fecFechaFin=$fecFechaFinTemp;
$aFecFin=split(/,$fecFechaFin);
$fecFechaFin=date(d/m/Y,mktime(0,0,0,$aFecFin[1],$aFecFin[2],$aFecFin[0]));
}
else
$fecFechaFin=$fecFechaIniProyecto;
return $fecFechaFin;
}
--
Mario de Frutos Dieguez
División de Ingeniería del Software
y Comunicaciones
CARTIF -Parque Tecnológico Boecillo
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php