Cómo crear un array con determinados valores de fecha en php

Con el código siguiente logro crear un array :

$cadenafechainicio="2021-01-01";
$cadenafechafin="2021-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 February');
$fechaintervalo1 = new DateInterval('P1D');
$dias = new DatePeriod($fechainicio, $fechaintervalo1, $fechafin);

foreach ($dias as $dia) {
// Asignamos un número por cada día de la semana 0-domingo y 6-sábado
$diasemana = $dia->format('w');
// Sólo imprime si es viernes, sábado o domingo
if ($diasemana !== '1' &&
$diasemana !== '2' &&
$diasemana !== '3' &&
$diasemana !== '4'
) {
array_push($array, $dia->format('d-m-Y'));
} //FIN del if
} //FIN del foreach

Array al que luego utilizo llamando $array[ ].

Hasta aquí bien, pero este no es el efecto que intento conseguir, quisiera saber cómo crear un array en el que el ranto de fechas indicado le asigne como clave el número de mes, y como valor el día, de forma que hayan tantas claves como meses existan en el intervalo de fechas, y a cada mes se le asignen tantos valores de fecha como días tenga el mes, de forma que luego llamo el array así $array[3][2] =mes de marzo, según día del mes, con la fecha en formato 'd-m-Y'.

He intentado muchas cosas a partir del código anterior, pero no lo consigo, ¿alguna ayudita?

1 respuesta

Respuesta
1

Te serviría algo como:

¿
<?php
$format = 'Y-m-d';
$cadenafechainicio="2021-01-01";
$cadenafechafin="2021-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 February');
$fechaintervalo1 = new DateInterval('P1D');
$dias = new DatePeriod($fechainicio, $fechaintervalo1, $fechafin);
$array = [];
foreach ($dias as $dia) {
    $mes = $dia->format('m');
    if (!array_key_exists($mes, $array)) {
        $array[$mes] = [];
    }
    $array[$mes][] = $dia->format('d');
} //FIN del foreach
print_r($array);

Entiendo que el array[$mes] [ ] =$dia... lo sustituyo x la función q hice para eliminar los dias de la semana q no quiero verdad? Junto con el array_push? 

¿O hay alguna forma más sencilla de no incluir en el array los días lunes martes miércoles y jueves?

Gracias.

Yo lo haría así:

$diasemana = $dia->format('w');
if (!in_array($diasemana, [1,2,3,4])) {
   $array[$mes][] = $dia->format('d');
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas