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

Next.js中数据库日期与今日日期比较过滤失效问题排查

解决NextJS中日期过滤失效的问题

问题根源

直接用字符串或混合Date对象与字符串进行日期比较,会导致JavaScript无法正确解析日期逻辑——即使是YYYY-MM-DD格式的字符串,若其中一方是Date实例,转换后的字符串格式可能不匹配,从而出现过滤错误。另外你的条件逻辑可能写反了:当前代码是dateNow <= newsData.endDate时不显示内容,否则显示,这和“只显示未过期内容”的常规需求相悖。

修复方案

  1. 统一日期格式为Date对象:将当前日期和newsData.endDate都转换为仅包含日期部分的Date实例,避免时间部分干扰比较结果。
  2. 修正条件逻辑:如果需求是显示未过期(截止日期≥当前日期)的内容,调整条件判断方向。

修改后的代码示例

// 处理当前日期,清除时间部分,确保仅比较日期
const dateNow = new Date();
dateNow.setHours(0, 0, 0, 0);

// 处理新闻截止日期,同样清除时间部分
const endDate = new Date(newsData.endDate);
endDate.setHours(0, 0, 0, 0);

// 仅显示截止日期未过期的内容
{endDate >= dateNow ? (
  <>
    <Col xs={12} md={12} mb={12}>
      <FormGroup className="px-3">
        <Row>
          <Col xs={12} md={12} mb={12}>
            <h5><b className="text-primary">{newsData.category}</b>: <b><a href={newsData.link} className="text-danger">{newsData.title}</a></b></h5>
          </Col>
        </Row>
        <b>Description:</b> {newsData.description}
        <br/><b>Posted by</b> <a href="#">{newsData.createdBy}</a> on <b>{newsData.createdOn}</b>.
      </FormGroup>
    </Col>
  </>
) : null}

额外说明

  • 如果newsData.endDate可能存在无效值(比如空字符串、非YYYY-MM-DD格式),建议先做格式校验,避免创建无效的Date对象。
  • 若坚持用字符串比较,需确保dateNow也是严格的YYYY-MM-DD格式字符串,示例:
    const dateNow = new Date().toISOString().split('T')[0]; // 生成YYYY-MM-DD格式字符串
    
    但这种方式不如Date对象比较可靠,尤其是涉及跨时区场景。

内容的提问来源于stack exchange,提问作者Mark Willow Aldave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:57:22