我的问题是,当存在闰年或具有不同天数的月份(例如 3 月有 31 天,4 月有 30 天)时,momentjs 如何处理以月或年为单位的加法或减法
举个例子,它是否默认将月份设置为30.4167天
,或者是否对不同年份的一个月有多少天或有多少天的差异进行一些计算三月或四月之间
moment().add(1, 'months');
是否等于每个月的 30.4167 天
或每月的 730.001 小时
每个月?
momentjs 是如何处理这个问题的
最佳答案
如果没有 moment.js,这个解决方案似乎效果很好。
基本上将月份设置为当前月份+月数。
这导致的一个问题是,如果加上 1 个月即 31 号,而下个月只有 30 号,那么您就会得到下个月的 1 号。
要解决此问题,您可以检查它。如果该月的新日期与原来不同,那么我们就溢出了,我们可以将这一天设置为 1 并减去 1 天来处理这个问题。
下面是一个示例,如果您运行,您还会看到 2 月 28 日和 29 日,有闰年差异。
const aday = 1000 * 60 * 60 * 24;
function addMonth(dt, m) {
const r = new Date(dt);
r.setMonth(r.getMonth() + m);
if (dt.getDate() !== r.getDate()) {
r.setDate(1);
r.setTime(r.getTime() - aday);
}
return r;
}
const first = new Date("2019-12-31");
for (let l = -10; l < 10; l += 1) {
const second = addMonth(first, l);
console.log(`${second.toDateString()} - ${l} months`);
}
关于javascript - momentjs 如何处理以月或年为单位的加法或减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58283755/