Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

131
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda