You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:09:04