PHP - Eventos periódicos por semanas

 
Vista:
sin imagen de perfil

Eventos periódicos por semanas

Publicado por Isaac (5 intervenciones) el 01/07/2017 18:35:24
Buenos días a todos,
tengo una function php que me retorna un array de fechas por cada dos semanas hasta ahí está todo bien, pero ahora quiero que de ese array de fechas solo me muestre las fechas del día lunes o martes o jueves o viernes.
soy principiante desarrollado en este lenguaje. Sé que la experiencia de ustedes me será de mucha ayuda espero su apoyo gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
function devuelveArray($fechaInicio,$fechaFin){
$arrayFechas=array();
$fechaMostrar = $fechaInicio;
 
 
while(strtotime($fechaMostrar) <= strtotime($fechaFin)) {
$arrayFechas[]=$fechaMostrar;
$fechaMostrar = date("Y-m-d", strtotime($fechaMostrar . " + 2 week"));
}
return $arrayFechas;
}
 
$arrayFechas=devuelveArray('2017-06-30', '2017-12-31');
 
 
 
 
?>
les comparto el código . espero su apoyo gracias .
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Eventos periódicos por semanas

Publicado por kip (877 intervenciones) el 02/07/2017 05:28:27
Hola, me modificado tu funcion, tal como te comentan es mejor trabajar con la clase DateTime, te da muchas ventajas!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function devuelveArray($fechaInicio, $fechaFin, $diasFiltro = array()){
    $arrayFechas = array();
    $fechaInicio = new DateTime($fechaInicio);
    $fechaFin = new DateTime($fechaFin);
    while($fechaInicio <= $fechaFin) {
        // Verifico que el dia no exista en el array para añadirlo
        if ( ! in_array($fechaInicio->format('w'), $diasFiltro)) {
            $arrayFechas[] = $fechaInicio->format('Y-m-d');
        }
        $fechaInicio->modify('+2 weeks');
    }
    return $arrayFechas;
}
 
// Este sera el arreglo con el num de los dias que no quieres
// que tome en cuente la funcion, 0 Domingo .... 6 Sabado
$diasFiltro = array(0, 3, 6);
$arrayFechas=devuelveArray('2017-06-30', '2017-12-31', $diasFiltro);
 
print_r($arrayFechas);

En el caso de aquellas fechas no hara ningun filtrado porque el dia 2017-06-30 cae viernes y como vas a un paso de 2 semanas entonces siempre seran viernes los dias.

Nos cuentas si te sirve.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Eventos periódicos por semanas

Publicado por Isaac (5 intervenciones) el 02/07/2017 17:42:58
Hola kip Gracias por responder a mi consulta.

Efectivamente como detallas en la ultima parte de tu comentario solo me sale las fechas del día Viernes porque la fecha es del 2017-06-30 y el resultado es solo del día viernes , El resultado esta bien se genera cada dos semanas, pero que pasa si quiero que me genere las fechas no solo del día viernes sino los lunes y viernes o mates y jueves en si que me de la opción de elegir de los días a mostrar.
espero tu comentario y gracias nuevamente por la ayuda.

foto_php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Eventos periódicos por semanas

Publicado por kip (877 intervenciones) el 02/07/2017 22:37:05
Entiendo, quizás es esto lo que buscas ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function devuelveArray($fechaInicio, $fechaFin, $diasaTomar = array()) {
    $arrayFechas = array();
    $fechaInicio = new DateTime($fechaInicio);
    $fechaFin = new DateTime($fechaFin);
    foreach ($diasaTomar as $diaaTomar) {
        $fechaReferencia = clone $fechaInicio;
        while ($fechaReferencia->format('w') != $diaaTomar) {
            $fechaReferencia->modify('+1 day');
        }
        while($fechaReferencia <= $fechaFin) {
            if ($fechaReferencia->format('w') == $diaaTomar) {
                $arrayFechas[$fechaReferencia->format('l')][] = $fechaReferencia->format('Y-m-d');
            }
            $fechaReferencia->modify('+2 weeks');
        }
        unset($fechaReferencia);
    }
    return $arrayFechas;
}
 
// Este sera el arreglo con el num de los dias que quieres
// que tome en cuente la funcion, 0 Domingo .... 6 Sabado
$diasaTomar = array(1, 5);
$arrayFechas=devuelveArray('2017-06-30', '2017-12-31', $diasaTomar);
 
print_r($arrayFechas);

Tendras un arreglo con las fechas de los dias que estan en el arreglo los cuales son 1 para Lunes y 5 para Martes, entonces te retornara algo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Array
(
    [Monday] => Array
        (
            [0] => 2017-07-03
            [1] => 2017-07-17
            [2] => 2017-07-31
            [3] => 2017-08-14
            [4] => 2017-08-28
            [5] => 2017-09-11
            [6] => 2017-09-25
            [7] => 2017-10-09
            [8] => 2017-10-23
            [9] => 2017-11-06
            [10] => 2017-11-20
            [11] => 2017-12-04
            [12] => 2017-12-18
        )
 
    [Friday] => Array
        (
            [0] => 2017-06-30
            [1] => 2017-07-14
            [2] => 2017-07-28
            [3] => 2017-08-11
            [4] => 2017-08-25
            [5] => 2017-09-08
            [6] => 2017-09-22
            [7] => 2017-10-06
            [8] => 2017-10-20
            [9] => 2017-11-03
            [10] => 2017-11-17
            [11] => 2017-12-01
            [12] => 2017-12-15
            [13] => 2017-12-29
        )
 
)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Eventos periódicos por semanas

Publicado por Isaac (5 intervenciones) el 03/07/2017 15:58:51
Hola Kip,

Efectivamente es lo que estaba buscando!!!
agradezco mucho su apoyo.

Gracias!! :) :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar