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

使用Moment JS计算月份差时出现'Is not a Function'报错如何解决

问题解决方法

报错根因

你调用moment().format("MM-DD-YYYY")后,返回的是字符串类型的值,并非Moment实例对象,字符串不存在diff方法,因此触发非函数报错。


修复步骤

  1. 修正currDate的定义,不要提前执行格式化操作,保留Moment实例:
// 错误写法,执行format后返回字符串
// let currDate = moment().format("MM-DD-YYYY");
// 正确写法,保留Moment实例
let currDate = moment();
// 如果需要打印格式化后的日期,单独调用format即可
console.log(currDate.format("MM-DD-YYYY"));
  1. 如果你需要获取两个日期的总月份差值,无需拆分年、月分别计算,直接调用diff方法指定单位为months即可:
const totalMonthsDiff = currDate.diff(getDate, 'months');

如果需要获取“X年Y个月”的拆分差值,保留你原来的计算逻辑即可,只要修正currDate为Moment实例就能正常运行。
另外你原代码中仅修改了welcm变量的值,没有赋值回对应DOM元素,欢迎语不会生效,同步做了修正。


修复后完整代码

function letsGo() {
  // 读取输入值
  let name = document.querySelector('#inputName').value;
  let date = document.querySelector('#inputDate').value;
  let welcmDom = document.getElementById("welcome");
  let errorpopup = document.getElementById("error");
  let animation = document.getElementsByClassName("anim")[0];

  // 修正currDate为Moment实例,不提前转字符串
  let currDate = moment();
  console.log(currDate.format("MM-DD-YYYY"));
  let getDate = moment(date, "MM-DD-YYYY");
  
  if (getDate.isValid()) {
    // 写入欢迎语
    welcmDom.innerHTML = "Welcome " + name;
    // 直接获取总月份差
    const totalMonths = currDate.diff(getDate, 'months');
    console.log("总月份差值:", totalMonths);
    
    // 若需要拆分年+月的展示可保留以下逻辑
    const yr = currDate.diff(getDate, 'years');
    getDate.add(yr, 'years');
    const month = currDate.diff(getDate, 'months');
    getDate.add(month, 'months');
    console.log("拆分结果:", yr, "年", month, "个月");
  } else {
    errorpopup.innerHTML = "Check Date";
    animation.classList.add('animError');
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:09:04