Момент JS .diff не возвращает правильное количество месяцев - PullRequest
0 голосов
/ 03 апреля 2020

Я получаю от определенного API эту метку времени, 1580844574000, которая равна 02/04/2020. Когда я запускаю приведенный ниже вывод,

moment().diff(moment(1580844574000), 'months')

, я получаю 1 вместо 2, учитывая, что сегодняшняя дата - 2 апреля 2020 года. Я также пытался

moment('04/02/2020').diff(moment(1580844574000), 'months'), и я все равно получите 1 вместо 2.

Есть ли что-то, что я делаю неправильно? Я собрал JSFiddle , где вы можете видеть, что вывод возвращает 1 вместо 2.

Спасибо!

1 Ответ

0 голосов
/ 03 апреля 2020

Это потому, что 4 февраля не является полным за 2 месяца до 2 апреля. Момент усекает десятичные разряды, чтобы вернуть целое число по умолчанию (в отличие от округления). С момента docs:

По умолчанию момент # diff будет обрезать результат до нуля после запятой, возвращая целое число. Если вы хотите число с плавающей запятой, передайте true в качестве третьего аргумента. До версии 2.0.0 момент # diff возвращал число, округленное до ближайшего целого числа, а не усеченное число.

Таким образом, передача true в качестве третьего аргумента также даст вам десятичные разряды:

moment('04/02/2020').diff(moment(1580844574000), 'months', true)
// returns 1.9131457940991838

Если вы хотите игнорировать часть даты, вы можете использовать функцию month() Момента и использовать обычное вычитание:

moment('04/02/2020').month() - moment(1580844574000).month()
// returns 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...