момент - проблема с fromNow - PullRequest
       9

момент - проблема с fromNow

0 голосов
/ 11 октября 2019

Эй, я пытаюсь вычислить возраст пользователя, используя Момент.

function getAge(birthDate) {
  const start = moment(birthDate, "YYYY-MM-DD");
  const end = moment();
  return start.to(end, true);
}

До мая месяца результат составляет 1 год:

getAge("1989-01-01"); // 31 years
getAge("1989-05-01"); // 30 years

пример: https://codesandbox.io/s/nostalgic-tesla-bzb3d

поведение такое же, используя fromNow вместо to

Есть ли у вас какие-либо идеи, как решить эту проблему?

Ответы [ 2 ]

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

Результат .to() является относительной временной строкой, и она внутренне округляет значения в любом направлении (таким образом, 29,5 года станут 30 годами). Он предназначен для отображения, например, показа «опубликовано 3 минуты назад» в сообщениях на форуме или в блоге.

Вы ищете метод .diff(), который вычисляет разницу, но учитывает только полные единицы измерения при условиипо второму аргументу, то есть усечение фактического числа.

  const start = moment(birthDate, "YYYY-MM-DD");
  age = moment().diff(start, "years");

https://codesandbox.io/s/naughty-lewin-e6vrt

0 голосов
/ 11 октября 2019

Вы можете использовать diff функцию как:

function getAge(birthDate) {
  const start = moment(birthDate, "YYYY-MM-DD");
  const end = moment();
  return end.diff(start, 'years');
}

console.log(getAge("1989-01-01"));
console.log(getAge("1989-05-01"));
...