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

自定义JS日期加减函数subtractDate报getTime不存在错误,addDate正常是什么原因?

问题原因

该报错的核心原因是调用subtractDate函数时传入的date1参数不是合法的Date类型实例,因此不存在getTime实例方法。addDate运行正常仅说明你调用addDate时传入的第一个参数符合Date类型要求,和两个函数的本身逻辑差异无关。

常见触发场景
  • 调用subtractDate时直接传入了日期格式字符串(如'2024-01-01')、时间戳数字等非Date类型值,没有提前通过new Date()构造为Date实例
  • 传入的date1参数为undefined、null等空值
  • 参数传入前的处理逻辑异常,比如误将Date对象通过格式化操作转为了字符串
排查与优化方案
  1. 先在函数内新增参数打印定位问题:
const subtractDate = function(date1, date2){
    // 调试用:输出参数类型和值确认异常来源
    console.log('date1类型:', typeof date1, '值:', date1)
    const date1Inms = date1.getTime()
    const date2Inms = date2.getTime()
    const subtract = new Date(date2Inms - date1Inms)
    return subtract
}
  1. 补充参数校验避免同类问题,同时修正原有subtractDate的逻辑缺陷:两个日期的时间戳差值直接传给new Date()会得到1970年基准时间加差值的日期,并不是预期的时间差结果,建议直接返回毫秒差自行换算单位即可:
const subtractDate = function(date1, date2){
    // 校验参数是否为合法Date实例
    if (!(date1 instanceof Date) || isNaN(date1.getTime())) {
        throw new Error('第一个参数必须是合法的Date对象')
    }
    if (!(date2 instanceof Date) || isNaN(date2.getTime())) {
        throw new Error('第二个参数必须是合法的Date对象')
    }
    // 返回毫秒级时间差,可按需除以86400000得到相差天数等
    return date2.getTime() - date1.getTime()
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:06:03