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

如何在JS对象比较函数中验证不同格式的相同日期?

解决日期格式不同但值相同的对象属性比较问题

你的问题核心是直接用!==比较会把格式不同但时间戳一致的日期字符串判定为不同值,需要给函数增加日期专属的比较逻辑。

修改方案

新增日期相等判断的辅助逻辑,先尝试将值转为Date对象,通过时间戳来验证是否为同一时间,而非直接比较字符串。

完整代码如下:

function getPropertyDifferences(obj1, obj2) {
  // 辅助函数:判断两个值是否为等效日期
  function areDatesEqual(date1, date2) {
    const d1 = new Date(date1);
    const d2 = new Date(date2);
    // 验证是否为有效日期,且时间戳完全一致
    return !isNaN(d1.getTime()) && !isNaN(d2.getTime()) && d1.getTime() === d2.getTime();
  }

  return Object.entries(obj1).reduce((diff, [key, value]) => {
    if (obj2.hasOwnProperty(key)) {
      const val = obj2[key];
      
      // 先判断当前属性值是否为可解析的日期格式
      const isBothDates = !isNaN(new Date(value).getTime()) && !isNaN(new Date(val).getTime());
      
      // 日期类型用辅助函数比较,非日期类型保留原严格比较逻辑
      if (isBothDates ? !areDatesEqual(value, val) : val !== value) {
        return {
          ...diff,
          [key]: val,
        };
      }
    }
    return diff;
  }, {});
}

// 测试用例
const a = {
  dateOfBirth: "Wed Jan 06 2021 12:00:05 GMT-0700 (Mexican Pacific Standard Time)",
  name: "test"
};
const b = {
  dateOfBirth: "2021-01-06T12:00:05.357",
  name: "test"
};

console.log(getPropertyDifferences(a, b)); // 输出 {},日期被判定为相同

关键说明

  1. 日期有效性校验:用!isNaN(new Date(val).getTime())确保值能被解析为有效日期,避免把非日期字符串误判为日期
  2. 时间戳比较:同一时间的不同格式日期,转换为Date对象后的时间戳(getTime()返回值)完全一致,以此作为相等判定依据
  3. 兼容原有逻辑:仅对日期类型做特殊处理,其他类型(如字符串、数字)仍保留原有的严格不等判断

内容的提问来源于stack exchange,提问作者Jesus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:20:33