lunes, 10 de noviembre de 2014

[PHP] Función para recorrer los dias de una fecha

Jelou... hoy una más :)

Bueno resulta que hace poco me toco crear un calendario que mostrara las fechas de ciertos días, o sea en la administración guardar un lapso de fechas (Fecha Inicio - Fecha Fin), y seleccionar los días que se ejecutaría la acción (Ejemplo, lunes, miércoles y viernes), entonces debía listarle al usuario las fechas en ese lapso de fechas que pertenecieran a esos días... Bueno pues me cree una función relativamente sencilla que recorre esas fechas día a día y validara si eran esos días seleccionados y mostrara los que si, en este caso utilicé un almacenamiento en DB así que les pego la función por si les sirve de algo, y recuerden, cualquier inquietud duda y/o sugerencia esta perfectamente recibida...


Aquí la función:

function guardarCalendario($stt, $endt, $dias) {
    try {
        $dias = json_decode($dias);
        foreach ($dias as $dk => $dv) {
            $dias[$dk] = str_replace(
                    array('lunes', 'martes', 'miercoles', 'jueves', 'viernes', 'sabado', 'domingo'), array('mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'), $dv
            );
        }

        list($anio_ini, $mes_ini, $dia_ini) = explode("/", $stt);
        list($anio_fin, $mes_fin, $dia_fin) = explode("/", $endt);

        $fecha_ini = (int) (strtotime($anio_ini . "-" . $mes_ini . "-" . $dia_ini));
        $fecha_fin = (int) (strtotime($anio_fin . "-" . $mes_fin . "-" . $dia_fin));
        
        for ($i = $fecha_ini; $i <= $fecha_fin; $i += 86400) {
            $dia = strtolower(date("D", $i));
            if (in_array($dia, $dias)) {
                $fecha_dia = date("Y-m-d", $i) . " 00:01:00";
                print($fecha_dia);
            }
        }
        
    } catch (Exception $e) {
        print "[Calendario] Error!: " . $e->getMessage();
        die();
    }
}


explico por encima jejeje me da pereza especificar todo xD... las variables así:

$stt: Starttime o sea la fecha de inicio en formato Y/m/d
$endt: EndTime o sea la fecha final en mismo formato Y/m/d
$dias: y aquí un array con los días en json, se preguntaran porque en json? RTA: porque lo hacia con ajax

Después hay un paso opcional este solo si su sistema esta en ingles para cambiar los valores de los días a ingles o pueden hacerlo viceversa. Los asigno a cada variable y ($anio, $mes, $dia) y los convierto en formato time() o sea numérico y los recorro cada 86400 segundos o sea un día y verifico si el date('D') esta entre los días de el array, si es así entonces imprime el día.

Bueno si tienen alguna duda me escriben e intentaré solucionarles la duda, saludos.

Saludos kid_goth

No hay comentarios:

Publicar un comentario