自定义JS日期加减函数subtractDate报getTime不存在错误,addDate正常是什么原因?
问题原因
该报错的核心原因是调用subtractDate函数时传入的date1参数不是合法的Date类型实例,因此不存在getTime实例方法。addDate运行正常仅说明你调用addDate时传入的第一个参数符合Date类型要求,和两个函数的本身逻辑差异无关。
常见触发场景
- 调用
subtractDate时直接传入了日期格式字符串(如'2024-01-01')、时间戳数字等非Date类型值,没有提前通过new Date()构造为Date实例 - 传入的
date1参数为undefined、null等空值 - 参数传入前的处理逻辑异常,比如误将Date对象通过格式化操作转为了字符串
排查与优化方案
- 先在函数内新增参数打印定位问题:
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 }
- 补充参数校验避免同类问题,同时修正原有
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
相关产品推荐
相关产品推荐

