JavaScript如何无需逐个校验即可判断昨天日期或是否已过24小时
24小时缓存自动失效的极简实现方案
核心逻辑完全不需要拆分校验年、月、日,直接通过毫秒级时间戳做差值计算即可,24小时对应的固定毫秒值为86400000。
具体实现步骤
- 封装统一的缓存读写方法,存储数据时同步写入当前时间戳
// 写入缓存 function setLocalCache(key, data) { const cachePack = { content: data, saveTime: Date.now() // 记录存储时的毫秒级时间戳 } localStorage.setItem(key, JSON.stringify(cachePack)) }
- 读取缓存时先校验是否过期,过期直接返回空触发新请求
// 读取缓存,默认有效期24小时 function getLocalCache(key, validTime = 86400000) { const cacheStr = localStorage.getItem(key) if (!cacheStr) return null const cacheData = JSON.parse(cacheStr) // 时间差超过有效期则判定缓存失效 if (Date.now() - cacheData.saveTime > validTime) { localStorage.removeItem(key) // 自动清理过期缓存 return null } return cacheData.content }
- 业务逻辑直接调用即可
// 页面初始化加载数据的逻辑 async function loadPageData() { const localData = getLocalCache('server_api_data') // 缓存有效直接用 if (localData) { renderPage(localData) return } // 缓存失效发起接口请求 const apiRes = await fetch('/your/api/interface').then(res => res.json()) setLocalCache('server_api_data', apiRes) renderPage(apiRes) }
可选扩展调整
如果你的需求是跨自然日就刷新(比如当天23点存的缓存,次日0点就要更新,不用等满24小时),只需要调整缓存校验逻辑即可:
// 判断两个时间戳是否属于同一天 function isSameDay(time1, time2) { const d1 = new Date(time1) const d2 = new Date(time2) return d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth() && d1.getDate() === d2.getDate() } // 调整后的按自然日过期的缓存读取方法 function getLocalCacheByDay(key) { const cacheStr = localStorage.getItem(key) if (!cacheStr) return null const cacheData = JSON.parse(cacheStr) if (!isSameDay(cacheData.saveTime, Date.now())) { localStorage.removeItem(key) return null } return cacheData.content }
内容的提问来源于stack exchange,提问作者Pooja
相关产品推荐
相关产品推荐

