Как моменты обрабатывают сложение или вычитание с точки зрения месяцев или года - PullRequest
0 голосов
/ 08 октября 2019

Мой вопрос заключается в том, как моменты обрабатывают сложение или вычитание в терминах месяцев или лет, когда существует високосный год или месяцы с разными днями, например, в марте 31 день, а в апреле 30 дней

AnНапример, устанавливает ли он по умолчанию месяцы на 30.4167 days или выполняет какие-либо вычисления относительно того, сколько дней будет в месяце в разные годы, или разницу между тем, сколько дней будет между мартом или апрелем

moment().add(1, 'months'); равно ли это 30.4167 days для каждого месяца или 730.001 hours для каждого месяца?

Как моменталы обрабатывают это

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Без moment.js, это решение, кажется, работает хорошо.

В основном установите месяц на текущий месяц + количество месяцев.

Одна проблема, которая вызывает это, состоит в том, что добавление 1 месяцаскажем, 31-го числа, а в следующем месяце только 30, даст вам 1-е число следующего месяца.

Чтобы это исправить, вы можете проверить это. Если новый день месяца отличается от исходного, то мы переполнились, и мы можем просто установить день на 1 и вычесть 1 день, чтобы справиться с этим.

Ниже приведен пример, если вы запустите, вы также будетесм. 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`);
}
0 голосов
/ 08 октября 2019
var currentDate = moment('2015-11-31');
var addMonth = moment(currentDate).add(1, 'M');

по годам

var addYear = moment(currentDate)..add('years', 1).format('L');
...