js узнать сколько лет прошло от заданной даты. Появляются лишние 60лет

const date1 = new Date(2000, 12, 4);
console.log(new Date(new Date().getTime() - date1.getTime()).getYear());

Пытаюсь получить сколько лет прошло от заданной даты, до текущего момента. Но почему-то результат выдается на 60 лет больше, чем должно быть.


Ответы (3 шт):

Автор решения: Mikhail Ionkin

Этот вопрос эквивалентен вычислению возраста. Ответ есть, например, тут: https://stackoverflow.com/questions/4060004/calculate-age-given-the-birth-date-in-the-format-yyyymmdd

Приведу пример (https://stackoverflow.com/a/7091965/5122436):

function getAge(dateString) {
    var today = new Date();
    var birthDate = new Date(dateString);
    var age = today.getFullYear() - birthDate.getFullYear();
    var m = today.getMonth() - birthDate.getMonth();
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
        age--;
    }
    return age;
}
→ Ссылка
Автор решения: ksa

Можно еще вот так вычислять количество полных лет...

let d1 = new Date(2000, 12, 4);
let d2 = new Date();
d1 = d1.toISOString().split('T')[0].replaceAll('-', '')
d2 = d2.toISOString().split('T')[0].replaceAll('-', '')
const val = Math.trunc((d2 - d1) / 10000)
console.log(val)

→ Ссылка
Автор решения: Owlly
const date1 = new Date(2000, 11, 4);
const today = new Date();

// Разница в годах
let yearsDiff = today.getFullYear() - date1.getFullYear();

// Проверка, если дата еще не прошла в этом году, вычитаем 1 год
const monthDiff = today.getMonth() - date1.getMonth();
const dayDiff = today.getDate() - date1.getDate();

if (monthDiff < 0 || (monthDiff === 0 && dayDiff < 0)) {
  yearsDiff--;
}

console.log(yearsDiff);
→ Ссылка