Módulo D: Fechas y Cookies Objetivo del Módulo: Facilitar el manejo de fechas y horas en entornos de operación, conversión y presentación de las mismas Emplear las características y beneficios del uso de cookies que permitan mejorar la experiencia de un usuario en un sitio web 1. FECHAS: Establecer la zona horaria Predeterminada _ <?php date default_timezone_set('America/Bogota');?> Descripción: Establece la zona horaria predeterminada usada por todas las funciones de fecha/hora Fecha Actual date ('d-m-Y'); atributos en orden: d = Día del mes, 2 dígitos m= Representación numérica de un mes, 2 dígitos Y=Representación numérica de un año, 4 dígitos Más atributos en: http://php.net/manual/es/function.date.php Descripción: Permite formato a la fecha/hora local del servidor (computador). El orden de los atributos puede variar según el programador lo desee 1 Ordenar Fechas $fecha = new DateTime( ‘1991-07-20’) ; echo $fechaordenada = $fecha -> format('d-m-Y'); Descripción: Organizar las fechas de acuerdo a la preferencia del usuario o programador es común, es por ello que en la variable $fecha (puede tomar cualquier nombre) almacenamos una fecha que deseamos ordenar y en la variable $fechaordenada gracias a la función format podemos presentar la fecha en el orden que deseemos. Fecha en letras Cuando necesitemos convertir una fecha en letras para facilitar la utilización de esta función, debemos pegar las dos siguientes funciones una sola vez al iniciar en nuestro archivo. <?php function conocerDiaSemanaFecha($fecha) { $dias = array('Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'); // en un array se guardan los días semana $dia = $dias[date('w', strtotime($fecha))]; //compara el día y lo ubica en una posición del array $dias return $dia; //devolvemos el día encontrado en el array } function obtenerFechaEnLetra($fecha){ $dia= conocerDiaSemanaFecha($fecha); $num = date("j", strtotime($fecha)); $anno = date("Y", strtotime($fecha)); $mes = array('enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'); $mes = $mes[(date('m', strtotime($fecha))*1)-1]; return array ($dia, $num,$mes,$anno); } ?> 2 Después de haber pegado las dos funciones al iniciar el archivo podemos utilizarlas. Ahora presentaremos un ejemplo como llamarlas $fecha = date ('d-m-Y'); Obtenemos la fecha actual y la guardamos en la variable fecha, podemos asignar la fecha que deseemos para el ejemplo utilizaremos la fecha actual ObtenerFechaEnLetra($fecha); Llamamos a la función que ubicamos anteriormente, la cual nos permite obtener la fecha en letras y le enviamos la fecha que queremos dar formato list ($dialetras, $dianum,$mesletras,$anno) = obtenerFechaEnLetra($fecha); Solicitamos a la función obtenerFechaEnLetra($fecha); que nos envié los resultados de nuestra solicitud y las almacenamos en un listado de variables echo "fecha ".$dialetras.', '.$dianum.' '.$anno; '.$mesletras.' Presentamos la fecha según el orden de nuestra preferencia para el usuario (No es obligatorio utilizar todas las variables para mostrarlas, de igual forma el orden puede ser aleatorio) Disminuir(n) o Adicionar días,semanas,meses,años a una fecha $fecha = '20-07-1991'; echo date('d-m-Y', strtotime('-1 day', strtotime($fecha))).'<br>' ; // resta 1 día echo date('d-m-Y', strtotime('-1 week', strtotime($fecha))).'<br>' ; // resta 1 semana echo date('d-m-Y', strtotime('-1 month', strtotime($fecha))).'<br>' ; // resta 1 mes echo date('d-m-Y', strtotime('-1 year', strtotime($fecha))).'<br>' ; // resta 1 año Elementos de la función: echo date('Formato_fecha_deseado’, strtotime('-N day', strtotime($fecha))).'<br>' ; 3 Diferencia entre dos fechas Al igual que en la función de convertir fechas en letras para facilitar la diferencia entre fechas vamos a ubicar la siguiente función al iniciar nuestro archivo $fecha = '20-07-1991'; echo date('d-m-Y', strtotime('-1 day', strtotime($fecha))).'<br>' ; // resta 1 día echo date('d-m-Y', strtotime('-1 week', strtotime($fecha))).'<br>' ; // resta 1 semana echo date('d-m-Y', strtotime('-1 month', strtotime($fecha))).'<br>' ; // resta 1 mes echo date('d-m-Y', strtotime('-1 year', strtotime($fecha))).'<br>' ; // resta 1 año Después de posicionar la función vamos a presentar un ejemplo como llamarla $fecha_inicial ='07-06-2016'; //definimos una fecha inicial menor a la final $fecha_final ='20-07-2016' ; //definimos una fecha final mayor a la inicial diferenciaentrefechas($fecha_inicial,$fecha_final); //llamamos a la función diferenciaentrefechas y enviamos $fecha_inicial y $fecha_$fecha_final en su respectivo orden list ($dia, $mes, $año) = diferenciaentrefechas($fecha_inicial,$fecha_final); //Guardamos en una lista la cantidad de días, meses y años de diferencia entre fechas echo "falta(n): ".$dia." día(s)".'<br>'; //presentamos los días de diferencia echo "falta(n): ".$mes." mes(es)".'<br>'; //presentamos los meses de diferencia echo "falta(n): ".$año." año(s)".'<br>'; //presentamos los años de diferencia 4 2.Horas: Hora Actual en horas, minutos,segundos date('g:i:s a'); echo "Hora en formato 12 horas: ".date('g:i:s a').'<br>'; date('H:i:s'); echo "Hora: en formato 24 horas: ".date('H:i:s').'<br>'; Adicionar o disminuir (n)horas,minutos,segundos a una hora $hora = "10:00:00 am"; echo date('g:i:s a', strtotime('+1 hour', strtotime($hora))).'<br>' ; // resta 1 hora echo date('g:i:s a', strtotime('+1 minutes', strtotime($hora))).'<br>' ; // resta 1 día echo date('g:i:s a', strtotime('+1 seconds', strtotime($hora))).'<br>' ; // resta 1 día Ordenar Formato 12 a 24 y viceversa $hora_en_formato_12_horas strtotime("13:30")); $hora_en_formato_24_horas PM")); = date("g:i a", = date("H:i", strtotime("1:30 Diferencia entre horas Como lo observamos con el trabajo de fechas para facilitar el manejo de restar horas copiaremos la función restar horas al iniciar nuestro archivo una sola ves. function restar_horas ($hora_inicial,$hora_final) { date_default_timezone_set('America/Bogota'); $hora_inicial_en_formato_24h = date("H:i:s", strtotime($hora_inicial)); 5 $hora_final_en_formato_24h = date("H:i:s", strtotime($hora_final)); $hora_inicial = new DateTime($hora_inicial_en_formato_24h); $hora_final = new DateTime($hora_final_en_formato_24h); //new DateTime -> creamos un objeto de tipo fecha $diferencia = $hora_final->diff($hora_inicial);//new DateTime -> creamos un objeto de tipo fecha $horas =$diferencia->format('%h'); $minutos =$diferencia->format('%i'); $segundos =$diferencia->format('%s'); return array($horas,$minutos,$segundos); } Despues de haber ubicado nuestra función la llamaremos , para ello… $hora_inicial = date("g:i:s a"); //definimos una hora inicial, menor a la hora final $hora_final = '10:00:00 pm'; // definimos una hora final,mayor a la inicial list($horas,$minutos,$segundos) =restar_horas($hora_inicial,$hora_final) ; //llamamos la función restar horas y le enviamos la hora inicial y hora final, y guardamos las horas,minutos y segundos en una lista echo "La diferencia es ".$horas.' horas '.$minutos.' minutos '.$segundos.' segundos'; // finalmente presentamos en el orden de nuestro gusto la diferencia en horas minutos y segundos COOKIES La principal utilidad de las cookies (galletas) es la de solventar el problema de la falta de estado en la navegación a través de las páginas web. Las Cookies proveen un mecanismo que permite guardar pequeñas cantidades de información. Esto permite mantener configuración que el usuario usa en el sitio web como colores de fondo, opciones de ordenamiento o nombres que ya han ingresado y no desean volver a ingresar cada vez que accedan. Antes de implementar las Cookies hay que tener en cuenta que el usuario las puede deshabilitar, por lo tanto no es recomendable hacer un sitio web que dependa de esto para funcionar.. 6 Como Crear una Cookie setcookie('nombrecookie', 'valor', tiempo_duración); Ejemplo: setcookie('nombreUsuario', 'Pedro', time() + 4800); Ejemplo Práctico <form action="" method="post"> <p> En el presente ejemplo utilizaremos cookies para verificar que un usuario ha ingresado más de una ves a nuestro sitio web, el cual se le aplicar gran variedad de utilidades por ejemplo para validar que una persona pueda votar una sola vez en un tiempo determinado, etc. </p> <p> <label>Identificación</label> <input name="cod" type="text" placeholder="Ingresar identificación" /> </p> <p> <input name="" type="submit" value="Ingresar"/> </p> </form> <?php if (isset($_POST['cod'])){//si el usuario digito su número de identificación if (isset($_COOKIE['visita'])) { // si existe la cookie visita echo "Gracias por visitarnos nuevamente ".$_POST['cod']; // el usuaro ya ingresó por segunda ves } else { setcookie("visita", $_POST['cod'] , time() + 3600); //creamos una nueva cookie para el Nuevo visitante que va a durar una hora. echo "Bienvenido por primera vez"; //el usuario ingreso por primera ves } } ?> 7 Ejercicios Ejercicio 1: Ordenar fecha Solicitar una fecha al usuario y después de pulsar el botón ordenarla en Años,meses,días Ejercicio 2: Fecha de nacimiento en letras Solicitar al usuario su fecha de nacimiento y después de presionar el botón presentar su fecha de nacimiento en letras Ejercicio 3: Recordatorio de eventos en días Solicitar al usuario un evento y un número de días dentro de los cuales se le recordará, cuando presione el botón debe mostrarse el evento y que día se le notificará Ejercicio 4: Tiempo restante para la final de la copa América Determinar tiempo restante para la final de la copa América 27 de junio de 2016 8 Bibliografia y Cibergrafia http://php.net/manual/es/book.datetime.php http://php.net/manual-lookup.php?pattern=cookie&scope=quickref 9