Next.js中数据库日期与今日日期比较过滤失效问题排查
解决NextJS中日期过滤失效的问题
问题根源
直接用字符串或混合Date对象与字符串进行日期比较,会导致JavaScript无法正确解析日期逻辑——即使是YYYY-MM-DD格式的字符串,若其中一方是Date实例,转换后的字符串格式可能不匹配,从而出现过滤错误。另外你的条件逻辑可能写反了:当前代码是dateNow <= newsData.endDate时不显示内容,否则显示,这和“只显示未过期内容”的常规需求相悖。
修复方案
- 统一日期格式为Date对象:将当前日期和
newsData.endDate都转换为仅包含日期部分的Date实例,避免时间部分干扰比较结果。 - 修正条件逻辑:如果需求是显示未过期(截止日期≥当前日期)的内容,调整条件判断方向。
修改后的代码示例
// 处理当前日期,清除时间部分,确保仅比较日期 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格式字符串,示例:
但这种方式不如Date对象比较可靠,尤其是涉及跨时区场景。const dateNow = new Date().toISOString().split('T')[0]; // 生成YYYY-MM-DD格式字符串
内容的提问来源于stack exchange,提问作者Mark Willow Aldave
相关产品推荐
相关产品推荐

