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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:54:06