javascript - momentjs 如何处理以月或年为单位的加法或减法

标签 javascript datetime momentjs

我的问题是,当存在闰年或具有不同天数的月份(例如 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/

相关文章:

objective-c - 如何将基于十进制的时间转换为 NSDate?

java - 将字符串转换为日期

javascript - 使用 moment.js 更改日期时间戳上的时区,而不更改时间

javascript - jQuery 发票和 HTML

javascript - 类型错误 : Cannot read property &#39;authorization&#39; of undefined using express-jwt

javascript - 使用 Google 脚本将变量推送到 HTML 中

javascript - 与未定义的比较

c# - 动态 LINQ 查询中 DateTime.AddMinutes() 的问题

javascript - 使用 Moment.js 检查字符串是否为日期

php - Moment.js + PHP + MySQL