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

Restringir acceso dependiendo de la hora o fecha usando PHP

Por parzibyte Tiempo de lectura: 4 min
0