Cómo rehacer array de fechas al cambiar de año

Tengo el siguiente código que lo que me hace es un array con las fechas del año, que utilizo para un calendario:

////EMPEZAMOS A FORMAR EL ARRAY CON LOS DATOS DE DÍAS DEL AÑO
$format = 'Y-m-d';
$cadenafechainicio="".$añoactual."-01-01";
$cadenafechafin="".$añoactual."-12-31";
$fechainicio = DateTime::createFromFormat($format, $cadenafechainicio);
$fechafin = DateTime::createFromFormat($format, $cadenafechafin);
$fechaintervalo = new DateInterval('P1D');
$fechainicio = new DateTime('first day of January');
$fechafin = new DateTime('last day of December');
$fechaintervalo1 = new DateInterval('P1D');
$dias = new DatePeriod($fechainicio, $fechaintervalo1, $fechafin);
$array_dias = [];
foreach ($dias as $dia) {
// Asignamos un número por cada día de la semana 0-domingo y 6-sábado
$mes = $dia->format('n');
$diasemana = $dia->format('w');
// Sólo imprime si es viernes, sábado o domingo
if ($diasemana !== '1' && $diasemana !== '2' && $diasemana !== '3' && $diasemana !== '4' ) {
if (!array_key_exists($mes, $array_dias)) { $array_dias[$mes] = []; }
$array_dias[$mes][] = $dia->format('Y-m-d');
} //FIN del if
} //FIN del foreach
////TERMINAMOS DE FORMAR EL ARRAY CON LOS DATOS DE DÍAS DEL AÑO

Con este otro código me voy moviendo por el calendario mes a mes y año a año:

////INICIO PAGINADO DEL CALENDARIO
if(!$_GET['mesactual'] || !$_GET['añoactual']){
$mesactual=date('n');
$añoactual=date('Y');
} else {
$mesactual=$_GET['mesactual'];
$añoactual=$_GET['añoactual'];
$mes=$_GET['mes'];
if($mes=='ant'){
if($_GET['mesactual']==1){ $mesactual=12; $añoactual--; } else { $mesactual--; }
} elseif($mes=='sig'){
if($_GET['mesactual']==12){ $mesactual=1; $añoactual++; } else { $mesactual++; }
}
}
////FIN PAGINADO DEL CALENDARIO

¿Cómo provoco que se recalcule el array al cambiar de año? He probado varias cosas, debe ser más sencillo de lo que me pienso, pero estoy espeso... ;-p

1 respuesta

Respuesta
1

No sé si entiendo bien tu pregunta... ¿no podrías poner el código que muestras al comienzo dentro de una función que reciba el año como parámetro e invocarla cada vez que cambia?

El caso es que ya lo hago, de hecho la variable $actual que se recibe para crear el array cambia, pero luego el array en sí no se actualiza...

Tiene toda la pinta de que el array no se regenera al cambiar $añoactual, no entiendo por qué no se regenera, si al cambiar de año (paginado), estoy forzando a que se cargue la página de nuevo con los nuevos datos...

Me he asegurado de que la variable $añoactual cambie y de que le llegue bien a $cadenafechainicio...hasta ahí llega seguro...pero el array no se actualiza, me pierdo en si tendrá que ver con el datetime::createfromformat??

¿Puede ser que no estés retornando la nueva versión del array? Sería más fácil si mostraras el código completo (Y mejor aún si lo formateas como código :)

Formatear com codigo? A q te refieres? No controlo mucho el foro la verdad. 

No sé por qué pero el array no se regenera, y he comprobado que le llega bien la variable modificada. 

Por fin he dado con el problema, el código queda así:

////EMPEZAMOS A FORMAR EL ARRAY CON LOS DATOS DE DÍAS DEL AÑO
$fechaintervalo = new DateInterval('P1D');
$fechainicio = new DateTime($añoactual.'-01-01');
$fechafin = new DateTime($añoactual.'-12-31');
$fechaintervalo1 = new DateInterval('P1D');
$dias = new DatePeriod($fechainicio, $fechaintervalo1, $fechafin);
$array_dias = [];
foreach ($dias as $dia) {
// Asignamos un número por cada día de la semana 0-domingo y 6-sábado
$mes = $dia->format('n');
$diasemana = $dia->format('w');
// Sólo imprime si es viernes, sábado o domingo
if ($diasemana !== '1' && $diasemana !== '2' && $diasemana !== '3' && $diasemana !== '4' ) {
if (!array_key_exists($mes, $array_dias)) { $array_dias[$mes] = []; }
$array_dias[$mes][] = $dia->format('Y-m-d');
} //FIN del if
} //FIN del foreach
////TERMINAMOS DE FORMAR EL ARRAY CON LOS DATOS DE DÍAS DEL AÑO

Me he cargado las 5 primeras líneas y modificado las dos siguientes, y ahora sí que funciona, no entiendo bien por qué de la forma inicial no se actualiza, y con esta sí, pero bueno, probado y funciona.

Muchas gracias de todas formas por el aporte, intenté lo de la función y nada, seguía igual.

Saludos.

¡Que bueno que lo hayas resuelto! :)

Lo que te decía sobre formatear el código es simple, fíjate que arriba del cuadro de texto donde escribes hay una barra de herramientas, una de ellas es un signo "<>":

Para comprender las diferencias te recomiendo utilizar un debugger e ir analizando paso a paso lo que ocurre durante la ejecución del código.

Exitos! Consúltame cualquier cosa ;)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas