如何忽略秒数对比当前日期与数据列表日期并更新字段
匹配日期并更新对应字段(忽略秒数)
需求明确:对比当前日期与数据列表中的日期(忽略秒及毫秒部分),若匹配则将对应数据项的isCurrentDate字段设为true。
先看你提供的示例数据:
const currentdate = new Date(); const works: any[] = [ { id: 1, dateWork:'2022-10-08T10:30:04.000Z', isCurrentDate: false, }, { id: 2, // 示例中id重复,建议修正为唯一值 dateWork:'2022-10-07T11:30:04.000Z', isCurrentDate: false, }, { id: 3, dateWork:'2022-10-06T13:30:04.000Z', isCurrentDate: false, } ];
解决方案
核心思路是把当前日期和列表中的日期都截断到分钟级别(去掉秒、毫秒),再进行匹配。由于你的dateWork是UTC时间(带Z后缀),处理时要统一用UTC时间组件,避免本地时区干扰匹配结果。
代码实现如下:
// 处理当前UTC日期,仅保留年、月、日、时、分 const currentUTC = new Date(Date.UTC( currentdate.getUTCFullYear(), currentdate.getUTCMonth(), currentdate.getUTCDate(), currentdate.getUTCHours(), currentdate.getUTCMinutes(), 0, // 秒设为0 0 // 毫秒设为0 )); // 遍历数组,更新匹配项的isCurrentDate字段 const updatedWorks = works.map(item => { const workDate = new Date(item.dateWork); // 处理列表中的UTC日期,同样截断到分钟 const workUTC = new Date(Date.UTC( workDate.getUTCFullYear(), workDate.getUTCMonth(), workDate.getUTCDate(), workDate.getUTCHours(), workDate.getUTCMinutes(), 0, 0 )); return { ...item, isCurrentDate: workUTC.getTime() === currentUTC.getTime() }; });
说明
Date.UTC()生成UTC时间戳,避免本地时区转换带来的误差- 用
getTime()获取时间戳比较,是最可靠的日期匹配方式 - 采用
map()返回新数组,不修改原数据,符合函数式编程最佳实践
内容的提问来源于stack exchange,提问作者Love
相关产品推荐
相关产品推荐

