Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/01/2011, 03:00
solonova
 
Fecha de Ingreso: abril-2007
Mensajes: 30
Antigüedad: 17 años
Puntos: 0
Busqueda Expediente X con fechas

Hola amigos, llevo 2 días con algo intrigante que no logro resolver respecto a la devolución del día de la semana de la función date(). Supongo que alguna vez os ha pasado que os quedáis atascados por días y no veis la luz.
Por eso me he decidido a escribir en el foro, pues después de freirme el cerebro de pensar, lo asumo, necesito ayuda para salir.

La cuestión es que mi script en el cual uso una función que ZiTAL publicó en el foro, consiste en un calendario que se comienza a partir de una fecha base ('d', 'm' y 'Y' ) y que aplica una función de suma de días para ir construyéndose en un periodo determinado.

El expediente X surge cuando, los meses 10, osea los octubre, ocurre algo insólito, y es que hay un día de las últimas semanas, que coincide en Lunes, que la función date('w') me lo devuelve como 0 (cero), es decir que aun siendo Lunes lo considera como Domingo, lo más curioso es que al siguiente día sumado se restablece correctamente, pero dejando en ese día "defectuoso" esa repetición marcada.

Un extracto del código es el siguiente:

Código:
<?
//defino fecha global
$g_anio = "2008";
$g_mes = "10";
$g_dia = "01"; 

function calculadia($dias_sumar){
	$dia=$GLOBALS["g_dia"]; //numero de dia en que se contrató
	$mes=$GLOBALS["g_mes"]; //numero del mes en que se contrató
	$ano=$GLOBALS["g_anio"]; //numero del año en que se contrató	
	$hoy_unix=mktime(0,0,0,$mes,$dia,$ano); //el dia de hoy en formato unix
	$dia_resul=$hoy_unix+($dias_sumar*24*60*60); //dias * horas * minutos * segundos.
	//Devuelvo el resultado
	return $dia_resul;	
}

$dias=0;
$periodo=30;
while ($dias<$periodo){
		echo 'Día semana: '.date('w',calculadia($dias)).' - Día mes: '.date('d',calculadia($dias)).'- Día sumado: '.$dias.'<br />';	
	$dias++;
}
?>

Verás como resultado una secuencia del estilo de:
(donde el día de mes 26 se repite, coincide con los días 25 y 26 a sumar en la función de suma)

Código:
...
Día semana: 6 - Día mes: 25- Día sumado: 24
Día semana: 0 - Día mes: 26- Día sumado: 25
Día semana: 0 - Día mes: 26- Día sumado: 26
Día semana: 1 - Día mes: 27- Día sumado: 27
Día semana: 2 - Día mes: 28- Día sumado: 28
...

Si cambias la fecha a octubre de 2009 verás que el día de mes que se repite es el 25 en vez del 26, y así todos los años. Curiosamente solo pasa en octubre, o yo no me he dado cuenta de más. Quizá es un error tonto, quizás es necesario la revisión de la función, sinceramente y modestamente, esto me ha superado. SI alguien puede echarme un cable le estaré muy agradecido.

Muchas gracias.

Última edición por solonova; 24/01/2011 a las 03:34