Algoritmos

Restringir acceso dependiendo de la hora o fecha usando PHP

Introducción

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.

Entendiendo el algoritmo

Simplemente vamos a tomar la fecha actual cada vez que se consulte el script. Y dependiendo de ello realizaremos ciertas acciones.

Consultando fecha actual

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.

Restringir en PHP dependiendo de la hora o día

Permitir sólo si está en determinado rango

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.

Permitir sólo si está en una hora específica

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

Dependiendo del día

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.

Dependiendo del día de la semana (lunes, martes, etcétera)

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";
}

 

En muchas horas pero no rangos

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.

Conclusión

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.

Referencias

PHP: date – Manual

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

  • 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.

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 días hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.