Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Неправильный подсчет времени с рождения (https://javascript.ru/forum/misc/45666-nepravilnyjj-podschet-vremeni-s-rozhdeniya.html)

greencard 10.03.2014 21:16

Неправильный подсчет времени с рождения
 
Здравствуйте, есть скрипт который подсчитывает дату с дня рождения.
но он неверно делает подсчеты.
день на один больше, время не +2 а +4 (для проверки выбиралась сегодняшняя дата)
вот сам скрипт

var yearLabel;
var monthLabel;
var dayLabel;
var hourLabel;
var minLabel;

var yearLabels = new Array(' год ', ' года', ' лет ');
var monthLabels = new Array(' месяц ', ' месяцы ', ' месяцев ');
var dayLabels = new Array(' день ', ' дня ', ' дней ');
var hourLabels = new Array(' час ', ' часы ', ' часов ');
var minLabels = new Array(' минута ', ' минуты ', ' минут ');

var yearGap = 1970;

function processRequest() {
    // get elements to fill
    var nameEl = document.getElementById('name');
    var birthDateEl = document.getElementById('birthDate');
    var timeFromBirthDateEl = document.getElementById('timeFromBirthDate');

    //fill user name
    nameEl.innerHTML += window.opener.lastName + ' ' +
        window.opener.firstName + ' ' +
        window.opener.patronymic;

    //calculate time from birth date
    var birthDate = new Date(window.opener.year, window.opener.month, window.opener.day);
    var diff = new Date(new Date() - birthDate);

    console.log()
    fillLabels((diff.getFullYear() - yearGap), (diff.getMonth() + 1), diff.getDate(), diff.getHours(), diff.getMinutes());

    //fill user's birth date
    birthDateEl.innerHTML += birthDate.getFullYear() + '/' + (birthDate.getMonth() + 1) + '/' + birthDate.getDate();

    //fill date difference
    timeFromBirthDateEl.innerHTML += (diff.getFullYear() - yearGap) + yearLabel +
        diff.getMonth() + monthLabel +
        diff.getDate() + dayLabel +
        diff.getHours() + hourLabel +
        diff.getMinutes() + minLabel;
}

function fillLabels(yearDiff, monthDiff, dayDiff, hourDiff, minuteDiff) {
    yearLabel = yearLabels[getSuffixIndex(yearDiff)];
    monthLabel = monthLabels[getSuffixIndex(monthDiff)];
    dayLabel = dayLabels[getSuffixIndex(dayDiff)];
    hourLabel = hourLabels[getSuffixIndex(hourDiff)];
    minLabel = minLabels[getSuffixIndex(minuteDiff)];
}

function getSuffixIndex(num) {
    if (num == 1) {
        return 0
    }
    else if (num >= 2 && num <= 4) {
        return 1
    }
    else {
        return 2
    }
}

window.onload = processRequest;


Часовой пояс GMT +3, время: 04:33.