使用Moment JS计算月份差时出现'Is not a Function'报错如何解决
问题解决方法
报错根因
你调用moment().format("MM-DD-YYYY")后,返回的是字符串类型的值,并非Moment实例对象,字符串不存在diff方法,因此触发非函数报错。
修复步骤
- 修正
currDate的定义,不要提前执行格式化操作,保留Moment实例:
// 错误写法,执行format后返回字符串 // let currDate = moment().format("MM-DD-YYYY"); // 正确写法,保留Moment实例 let currDate = moment(); // 如果需要打印格式化后的日期,单独调用format即可 console.log(currDate.format("MM-DD-YYYY"));
- 如果你需要获取两个日期的总月份差值,无需拆分年、月分别计算,直接调用
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
相关产品推荐
相关产品推荐

