¿Cómo restablezco una variable localStorage que es un boolean que rastrea si un usuario completó una acción ese día? Cuando la hora llega, por ejemplo, a 8 am local time , restablece el boolean a false para mostrar que la acción aún no se ha completado.
Si el usuario completó la acción ese día, la variable localStorage se establece en true y mostramos la cuenta regresiva hasta 8 am .
Aquí están mis métodos que verifican la hora actual y la hora hasta 8 am .
const setActionCompleted = () => { var hasCompleted = true; localStorage.setItem("action-completed-today", JSON.stringify(hasCompleted)); } const twoDigits = (number) => { return (number < 10 ? '0' : '') + number; } const countDown = () => { var reset = new Date(); var now = new Date(); reset.setHours(8, 0, 0); if(now > reset){ reset.setDate(reset.getDate() + 1); } var timeToReset = ((reset - now) / 1000); var hours = ~~(timeToReset / 60 / 60) % 60; var minutes = ~~(timeToReset / 60) % 60; var seconds = ~~timeToReset % 60; return `${twoDigits(hours)}:${twoDigits(minutes)}:${twoDigits(seconds)}`; } const intervalId = setInterval(() => { console.log(countDown()); }, 1000); // clear interval after 10 seconds so its not running indefinitely setTimeout(() => {clearInterval(intervalId)}, 10000);Un par de opciones diferentes aquí. Puede caducar el elemento periódicamente y luego hacer localStorage.removeItem() , luego verificar su valor booleano si localStorage.getItem() encuentra un elemento que coincida con sus criterios en lugar de cambiar el valor asociado a false . Para hacerlo, querrá crear un contenedor personalizado alrededor localStorage.setItem para que pueda aceptar una tercera propiedad para el tiempo de vencimiento como:
function setWithExpiry(key, value, interval) { const now = new Date(); const item = { value: value, expiry: now.getTime() + interval, }; localStorage.setItem(key, JSON.stringify(item)); };Luego, cuando obtenga artículos de localStorage, si la hora actual ha pasado la hora de caducidad del artículo, haga que elimine el artículo por clave de localStorage y devuelva nulo.
function getWithExpiry(key) { const itemStr = localStorage.getItem(key) if(!itemStr) { return null; } const item = JSON.parse(itemStr); const now = new Date(); if (now.getTime() > item.expiry) { localStorage.removeItem(key); return null; } return item.value; } Teóricamente, entonces podría simplemente restablecer el valor a false cuando se encuentre si está caducado en lugar de eliminarlo, si lo desea.