JavaScript中给日期添加天数时如何考虑不同月份的天数差异?
问题解决:缴费日期范围计算错误修正
你的代码计算错误的核心原因不是月份天数差异,而是Moment.js的add()方法会直接修改原日期对象,导致后续计算基于已经修改过的日期:
- 第一步
Date_application.add(105, 'days')已经把原申请日期改成了加105天后的日期 - 第二步
Date_application.add(135, 'days')是在这个修改后的日期基础上再加135天,最终得到的是申请日期加240天的结果,完全偏离了需求
修正方案
需要基于原始的申请日期分别计算两个范围日期,避免修改原对象。可以用clone()方法复制原日期对象后再进行加法操作:
// 解析原始申请日期,保留原对象不修改 const dateApplication = moment('{Date_application}', 'DD-MM-YYYY'); // 复制原日期后加105天 const datePaymentFrom = dateApplication.clone().add(105, 'days'); // 复制原日期后加135天 const datePaymentTo = dateApplication.clone().add(135, 'days'); // 生成提示语 `Please make sure you pay your fees between ${datePaymentFrom.format('DD-MM-YYYY')} and ${datePaymentTo.format('DD-MM-YYYY')}`;
补充说明
- Moment.js的
clone()方法会创建一个原日期对象的副本,后续对副本的修改不会影响原始日期 - 这种方式会自动处理不同月份的天数差异(包括闰年2月的情况),无需手动计算月份天数
内容的提问来源于stack exchange,提问作者shadow.T
相关产品推荐
相关产品推荐

