JavaScript实现日期减一年时报getFullYear is not a function错误求助
问题排查
- 核心错误出在
dateMinusOneYear变量的赋值逻辑:你对new Date()返回的Date对象直接执行了加法运算,JS会隐式将Date对象转为字符串,再和后面的时区偏移毫秒数做字符串拼接,最终dateMinusOneYear是字符串类型,自然不存在getFullYear方法。 - 额外问题:你用固定值
31556952000毫秒(约365.24天)计算一年时长的方式存在偏差,遇到闰年、夏令时切换的场景会导致日期不准。
修复方案
完全保留new Date用法的前提下,推荐使用更稳妥的Date原生年份操作方法,自动处理闰年、月份天数、时区等兼容问题,修复后的代码如下:
function getDate() { var now = new Date(); // 基于当前时间创建新的Date对象,避免修改原时间 var dateMinusOneYear = new Date(now); // 直接减1年,原生方法自动处理闰年、大小月等特殊场景 dateMinusOneYear.setFullYear(dateMinusOneYear.getFullYear() - 1); // 格式化输出日期字符串 var dateStr = ("0000" + dateMinusOneYear.getFullYear()).slice(-4) + "-" + ("00" + (dateMinusOneYear.getMonth() + 1)).slice(-2) + "-" + ("00" + dateMinusOneYear.getDate()).slice(-2); return dateStr; }
如果你一定要保留手动计算毫秒的写法,只需要调整运算顺序,所有时间计算完成后再传入Date构造函数即可:
var dateMinusOneYear = new Date(now.getTime() - 31556952000 + (now.getTimezoneOffset() * 60000));
内容的提问来源于stack exchange,提问作者hungryhippos
相关产品推荐
相关产品推荐

