JS中如何比较dd/mm/yyyy格式日期字符串?类型转换求助
问题根源
你当前的today是字符串格式的日期(如"dd/mm/yyyy"),和event.fecha_fin(Any类型,大概率为同格式字符串)直接做比较时,是按字符串字典序判断大小,而非实际日期的先后顺序,这会导致比较逻辑失效(例如"05/10/2024"字符串会被认为小于"10/09/2024",但实际日期前者是10月5日,比后者9月10日晚)。
解决方案:转成时间戳(Number类型)比较
时间戳是从1970年1月1日00:00:00 UTC开始的毫秒数,属于Number类型,直接用>、>=等运算符就能准确比较日期先后。
步骤1:生成当天的时间戳(提前在循环外处理,避免重复计算)
// 创建当天的Date对象,并把时分秒设为0,只保留日期部分 const today = new Date(); today.setHours(0, 0, 0, 0); // 获取时间戳(Number类型) const todayTimestamp = today.getTime();
步骤2:将event.fecha_fin转成时间戳
假设event.fecha_fin是"dd/mm/yyyy"格式的字符串,需要先拆分日、月、年,再构造Date对象并生成时间戳:
// 处理单条event的fecha_fin const [dd, mm, yyyy] = event.fecha_fin.split('/'); // 注意:Date构造函数的月份是0开始(0=1月),所以要减1 const fechaFinDate = new Date(yyyy, mm - 1, dd); fechaFinDate.setHours(0, 0, 0, 0); const fechaFinTimestamp = fechaFinDate.getTime();
步骤3:修改比较逻辑
用时间戳直接做数值比较:
for (const event of events) { // 转换event.fecha_fin为时间戳 const [dd, mm, yyyy] = event.fecha_fin.split('/'); const fechaFinDate = new Date(yyyy, mm - 1, dd); fechaFinDate.setHours(0, 0, 0, 0); const fechaFinTimestamp = fechaFinDate.getTime(); // 用时间戳做比较 if (fechaFinTimestamp >= todayTimestamp && event.hora_fin > my_time) { console.log(fechaFinTimestamp > todayTimestamp); eventsWithLowestPrice.push(event.id_evento_fk); console.log(event.id_evento_fk); } }
注意事项
- 如果
event.fecha_fin的格式不是"dd/mm/yyyy",需要根据实际格式调整拆分规则和Date构造参数(例如如果是"yyyy-mm-dd",可以直接传入Date构造函数) - 若需要包含时分秒的完整时间比较,去掉
setHours(0,0,0,0)即可,直接用原始Date对象的时间戳
内容的提问来源于stack exchange,提问作者JPcoder
相关产品推荐
相关产品推荐

