wolf47
@wolf47
Айтишник, немного програмирую на JS

Как посчитать возраст за прошедший период?

Друзья, всем привет!

Никак не получается посчитать возраст за прошлый период. По некоторым датам возвращает NaN.

Задача заключается в том, чтобы получить возраст коровы за прошлый период. Далее на основе этого возраста делать дальнейшую манипуляцию

function ageInLastYear(year, cow) {
  var bdate = moment(cow.bdate);
  var month = bdate.format("MM")-1;
  var day = bdate.format("DD");
  year = moment([year,month, day]);
  return year.diff(bdate, "month");
}

function testCows() {

var cows = getCows().filter(function (cow) { return cow.gender === "Ұрғашы" });

var getCow = function(vid){
  return cows.filter(function(cow){return cow.vid === vid})[0];
}

var log = function(year, cow){
  var age = ageInLastYear(year,cow);
  Logger.log(year+" "+cow.vid+" "+cow.age+" "+age+" "+ cow.bdate);
}


log(2018,getCow(17)); // вывод 2018 17 60 35 2015-12-31T14:00:00-05:00
log(2019,getCow(17)); // вывод 2019 17 60 47 2015-12-31T14:00:00-05:00
log(2020,getCow(17)); // вывод 2020 17 60 59 2015-12-31T14:00:00-05:00
log(2021,getCow(17)); // вывод 2021 17 60 71 2015-12-31T14:00:00-05:00
Logger.log("-==-");
log(2018,getCow(28)); // вывод 2018 28 55 NaN 2016-02-29T14:00:00-05:00
log(2019,getCow(28)); // вывод 2019 28 55 NaN 2016-02-29T14:00:00-05:00
log(2020,getCow(28)); // вывод 2020 28 55 47 2016-02-29T14:00:00-05:00
log(2021,getCow(28)); // вывод 2021 28 55 NaN 2016-02-29T14:00:00-05:00
Logger.log("-==-");
log(2018,getCow(204)); // вывод 2018 204 11 NaN 2020-02-29T14:00:00-05:00
log(2019,getCow(204)); // 2019 204 11 NaN 2020-02-29T14:00:00-05:00
log(2020,getCow(204)); // 2019 204 11 NaN 2020-02-29T14:00:00-05:00
log(2021,getCow(204)); // 2019 204 11 NaN 2020-02-29T14:00:00-05:00
Logger.log("-==-");
}

Ошибку можно воспроизвести на сайта момента вот эту строку:
moment([2018, 12, 31]).diff(moment("2015-12-31T14:00:00-05:00").format(), "month")
  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ответы на вопрос 1
wolf47
@wolf47 Автор вопроса
Айтишник, немного програмирую на JS
Почему этот огромный фреймворк не может выполнить простую задачу ?
Нужно просто сравнить две даты. И получить разницу в месяцах.

Вот решение:
function monthDiff(d1, d2) {
    var months;
    months = (d2.getFullYear() - d1.getFullYear()) * 12;
    months -= d1.getMonth();
    months += d2.getMonth();
    return months <= 0 ? 0 : months;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Artezio Санкт-Петербург
от 160 000 до 220 000 ₽