Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

138
Vistas
Verifique si una hora está entre 2 períodos de tiempo - Reaccionar nativo

Estoy creando una función de cierre de sesión automático (que debe cerrarse todos los días a las 9 a. m.) en mi aplicación nativa de reacción, por lo que se me ocurrió la lógica:

Entonces, lo que estoy haciendo es, digamos que tengo mi componente de pila principal, dentro de useEffect, supongamos que la aplicación se acaba de abrir, verificaré si tengo lastRunTime guardado en async-storage , si es cierto, entonces crearé un nuevo objeto de fecha que apunta a la fecha actual de hoy, luego, si las 9:00 a.m. se encuentran entre estas 2 horas, cerraré la sesión y estableceré lastRunTime como Date.now().toString() en async-storage .

 // auto-logout at 9 am everyday useEffect(() => { const lastRunTime = AsynStorage.getItem('lastRunTime'); if (lastRunTime) { const justOpened = new Date(); const lastOpened = new Date(lastRunTime); if (9 <= justOpened.getHours() && 9 >= lastOpened.getHours()) { logout(); AsynStorage.setItem('lastRunTime', now.toString()); } } else { console.log('9 am not in time range'); AsynStorage.setItem('lastRunTime', new Date().toString()); } }, []);

Pero no da el resultado correcto, siempre imprime console.log('9 am not in time range'); aunque proporcioné la fecha de ayer y Date.now() .

 const lastOpened = new Date(2022, 1, 21, 18, 0); // yesterday's 6 pm const justOpened = new Date(); // right now // now obviously today's 9 am was in between the 2 time intervals, but still it logs: console.log('9 am not in time range');

¿Puede alguien ayudarme aquí?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Soluciones posibles

En primer lugar, solo para aclarar, useEffect(() => {...}, []) solo se ejecuta una vez, cuando crea el componente. Se puede considerar como un equivalente del componentDidMount de la terminología más antigua.

Por lo tanto, si desea cerrar la sesión del usuario a las 9, si el usuario abre su aplicación a las 8:59 y espera hasta las 9:01, no se cerrará la sesión, porque useEffect se ejecutó a las 8:59 . Puede resolver este problema con cualquier tipo de intervalo y verificar periódicamente si la hora es más de las 9:00.

La solución más ideal sería manejar esta función de cierre de sesión en el backend, si tiene control sobre el backend, ya que eso tiene la mayor certeza de que si el backend está en línea y la lógica es correcta, su usuario será desconectado.

La segunda solución más ideal sería tener algún tipo de tarea en segundo plano programada en su aplicación, que asegure que el usuario cierre la sesión, independientemente de si su aplicación está abierta.

La tercera solución más ideal es usar algún tipo de intervalo como expliqué anteriormente, pero eso solo funciona si la aplicación está abierta.


Problema con su código actual:

 if (9 <= justOpened.getHours() && 9 >= lastOpened.getHours()) {

Esto si es incorrecto, porque digamos, lastOpened.getHours es 17 (abrí la aplicación ayer a las 17:00), no me desconectaré, porque 9 >= 17 es false . Puede usar alguna biblioteca de manejo de fechas como date-fns o moment (menos recomendado debido a que no usa objetos de fecha simples) para facilitar el manejo de fechas, verifique si su fecha actual es posterior a las 9:00 de hoy y si su lastRunTime es anterior a su fecha actual .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda