Angular表单按年份筛选数据时报getFullYear is not a function错误如何解决
报错原因
报错的核心原因是 oferta.fechaPresentacionFulcrum 字段不是 Date 类型,无法调用 Date 原型上的 getFullYear() 方法。
绝大多数情况是该字段为后端返回的字符串格式日期(如ISO格式的日期字符串 2021-06-15T08:00:00)、或者为null/undefined,直接调用Date实例方法就会抛出该错误。
解决方案
有两种常用的修复方式,按需选择即可:
方案1:提前统一转换原始数据类型
在获取到列表原始数据 ofertasOriginal 时,统一把日期字段转成合法的Date对象,避免后续筛选时重复处理:
// 示例:接口请求拿到返回数据后做预处理 this.ofertasOriginal = response.list.map(item => { return { ...item, // 兼容空值,避免生成Invalid Date fechaPresentacionFulcrum: item.fechaPresentacionFulcrum ? new Date(item.fechaPresentacionFulcrum) : null } })
方案2:筛选时做兼容处理
如果不想修改原始数据,直接在筛选逻辑里增加类型校验和转换即可,同时兼容空值和非法日期场景:
buscarOfertas(valores: any) { if (valores.años) { this.ofertas = this.ofertas.filter(oferta => { const rawFecha = oferta.fechaPresentacionFulcrum; // 空值直接过滤掉 if (!rawFecha) return false; // 统一转成Date类型 const fecha = typeof rawFecha === 'string' ? new Date(rawFecha) : rawFecha; // 校验是合法Date后再取年份比较,同时把表单值转成数字避免类型不一致 return fecha instanceof Date && !isNaN(fecha.getTime()) ? fecha.getFullYear() === Number(valores.años) : false; }); } }
内容的提问来源于stack exchange,提问作者kintela
相关产品推荐
相关产品推荐

