Esto resultará un ejercicio sencillo pero a la vez interesante que podemos implementar en PHP. Se trata de restringir o bloquear el acceso a determinadas páginas, o a determinadas acciones dependiendo de la hora del día, e incluso dependiendo del día, mes, año, etcétera. Para esto usaremos el lenguaje más popular del lado del servidor: PHP.
Además, esto permite que, aunque el usuario cambie la hora de su pc nosotros podamos seguir restringiéndolo. Ya que nadie (sólo nosotros) podrá cambiar la hora del servidor.
Simplemente vamos a tomar la fecha actual cada vez que se consulte el script. Y dependiendo de ello realizaremos ciertas acciones.
Cuando consultamos la fecha, puede que ésta esté mal configurada por la zona horaria: cosa que puede traernos grandes problemas. Para ello, simplemente tenemos que establecerla bien usando date_default_timezone_set. En mi caso pondré la zona horaria de la Ciudad de México, así:
date_default_timezone_set("America/Mexico_City");
Si tienes dudas sobre esto, ya escribí un post de cómo establecer la zona horaria en diferentes lugares del mundo.
Ahora sí vamos a trabajar.
Por ejemplo, supongamos que sólo permitiremos que los visitantes vean nuestro sitio de 8 a 10 de la mañana.
Entonces consultaríamos la hora actual utilizando date(“H”) y luego convirtiendo ese valor a entero (porque recordemos que date(“H”) devuelve el número con ceros a la izquierda, por ejemplo 02 para las 2 de la madrugada).
Finalmente compararíamos y el código queda así:
<?php $desde = 8; # Desde las ocho de la mañana $hasta = 10; # Hasta las 10 $hora_actual = intval(date("H")); if ($hora_actual >= $desde && $hora_actual < $hasta) { # Aquí la acción que se realice en el horario permitido echo "Bienvenido, visitante"; } else { # Mostrar un aviso echo "No se permiten visitantes a esta hora del día"; }
Hay que ser cuidadosos en el if. Como vemos, comparamos si es menor a “$hasta”. Ya que así, permitirá entrar hasta 9:59 pero cuando sean las 10 (o un número mayor, incluso con minutos) ya no dejará pasar.
Si nosotros hubiésemos comparado con menor o igual, el rango se habría ampliado hasta las 10:59.
Ahora veamos cómo hacer que se muestre la página pero sólo a una hora, por ejemplo, a las 11 de la mañana.
En otras palabras, estará disponible desde 11:00 hasta 11:59. Utilizaremos igualmente date(“H”) y el código quedará más reducido:
<?php $permitido = 11; # Sólo a las 11 de la mañana $hora_actual = intval(date("H")); if ($hora_actual === $permitido) { # Aquí la acción que se realice en el horario permitido echo "Bienvenido, visitante"; } else { # Mostrar un aviso echo "No se permiten visitantes a esta hora del día"; }
Como lo dije, sólo se permitirá desde 11:00 hasta 11:59
También podemos ver los días del mes (del 1 al 30 o 28 o 31, dependiendo del mes). Por ejemplo, ¿qué tal si nuestro sitio sólo puede ser visitado desde el día 14 hasta el día 21?
Lo que tendríamos que hacer sería consultar el día del mes, y comparar. Casi como en los ejemplos de arriba pero ahora utilizamos date(“j”). El código queda así:
<?php $desde = 14; # Desde el día 14 $hasta = 21; # Hasta el día 21 $dia_actual = intval(date("j")); #Convertir siempre a entero para evitar errores if ($dia_actual >= $desde && $dia_actual <= $hasta) { # Aquí la acción que se realice en el horario permitido echo "Bienvenido, visitante"; } else { # Mostrar un aviso echo "No se permiten visitantes en este día"; }
Así, se podrá acceder desde el 14 hasta el 21, pero el 22 ya no. Ni los otros días.
Si queremos que nuestro sitio sólo se vea los domingos, o un día de la semana (sin importar el número del día) podemos usar date(“w”) que devuelve un número del 0 al 6, el 0 es domingo y el 6 es sábado.
Sabiendo eso, para permitir que sólo los Lunes (día número 1, porque domingo es 0) se pueda acceder, hacemos esto:
<?php $lunes = 1; #Domingo 0, Lunes 1... Sábado 6 $dia_actual = intval(date("w")); #Convertir siempre a entero para evitar errores if ($dia_actual === $lunes) { # Aquí la acción que se realice en el horario permitido echo "Bienvenido, visitante"; } else { # Mostrar un aviso echo "No se permiten visitantes en este día"; }
Para el caso de que necesitemos permitir el sitio en muchas horas pero no en un rango, por ejemplo, a las 2 de la madrugada, a las 5 de la tarde y a las 11 de la noche (2, 17 y 23 horas) podemos utilizar in_array.
<?php $permitidos = [2, 17, 23]; # A las 2 a.m., 5 p.m. y 11 p.m. $hora_actual = intval(date("H")); if (in_array($hora_actual, $permitidos)) { # Aquí la acción que se realice en el horario permitido echo "Bienvenido, visitante"; } else { # Mostrar un aviso echo "No se permiten visitantes a esta hora del día"; }
Con algunas modificaciones incluso podríamos permitir en muchos días, meses o años.
Lo único que tenemos que hacer es entender bien las formas de trabajar con fechas y horas en PHP, para que, dependiendo de ello, realicemos condiciones. Con la función date podemos saber el año, mes, día, segundos, día del año (hasta 365) y mucho más.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.
Ver comentarios
Muy buen blog, muchas gracias
Hola, y como controlas que la pagína luego de la hora "hasta" funcione si esta no se recarga? es decir, ingreso de 8 a 10 mientras esta habilitada, según el php debe deshabilitarla a las 10 am para el primer ejemplo. Si no recargo la pagina después de las 10 am como el php valida el cambio? Creería que falta agregar un javascript que recargue la pagina cada segundo para así lograr que se valide sin que el usuario recargue o no la pagina.
Solo atiendo consultas en https://parzibyte.me/#contacto