为何moment.js的.add方法无法被识别?代码报错求助
为什么Moment.js的.add()方法报错“不是可识别函数”?
这个问题的核心是你搞混了Moment对象和它格式化后返回的字符串的区别!
看你写的这行出问题的代码:
this.futuredate= () => (`${now.format(dateFormat1).add('days', 5)}`);
now.format(dateFormat1)执行后,返回的是一个字符串类型的日期(比如"10252024"),而字符串是没有.add()方法的——这就是你收到报错的直接原因。你提到数值类型的Begindate能正常工作,应该是因为那个变量直接持有Moment对象,不是格式化后的字符串。
修正方案
你需要先对Moment对象调用.add()方法修改日期,再调用.format()来格式化输出。另外注意两个细节:
- Moment的
.add()方法推荐的参数顺序是「数值在前,单位在后」,或者用对象形式(比如.add({days:5})),这是更清晰且符合新版规范的写法; - 直接调用
now.add()会修改原Moment对象,导致后续使用now时日期已经被改变,所以最好用.clone()复制一个新实例再修改,避免污染原有数据。
修正后的完整代码如下:
moment=require('moment'); const now= moment(); const dateFormat1 = 'MMDDYYYY'; this.todaysdate = () => now.format(dateFormat1); // 可以简化模板字符串的写法 this.futuredate= () => { // 先克隆原对象,再添加天数,最后格式化 return now.clone().add(5, 'days').format(dateFormat1); };
内容的提问来源于stack exchange,提问作者user8317064
相关产品推荐
相关产品推荐

