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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:45:28