Публикация

Функция добавления к дате Н-ое количество дней (лет, месяцев, часов, минут)

Функция возвращает дату с прибавленным количеством временНых единиц.

function AddDateDateUnits(StartDate, UnitCount, UnitID) {
    StartDate = new Date(StartDate);
    if (IsEmptyValue(UnitID)) {
        UnitID = duDay;
    }
    var FullYear = StartDate.getFullYear();
    var Month = StartDate.getMonth();
    var Day = StartDate.getDate();
    var Hour = StartDate.getHours();
    var Min = StartDate.getMinutes();
    var EndDate = StartDate;
    switch (UnitID) {
    case duYear: EndDate = new Date(FullYear + UnitCount, Month, Day,
        Hour, Min);
        break;
    case duMon: EndDate = new Date(FullYear, Month + UnitCount, Day,
        Hour, Min);
        break;
    case duDay: EndDate = new Date(FullYear, Month, Day + UnitCount,
        Hour, Min);
        break;
    case duHour: EndDate = new Date(FullYear, Month, Day, Hour
        + UnitCount, Min);
        break;
    case duMin: EndDate = new Date(FullYear, Month, Day, Hour,
        Min + UnitCount);
        break;
    }
    return EndDate;
}

Функция возвращает разницу между датами в указанных временНых единицах.
Параметр IsCorrectDays означает, что будет произведен расчет в абсолютных днях.

function GetDateDiffByUnitID(StartDate, EndDate, UnitID, IsCorrectDays) {
    StartDate = new Date(StartDate);
    EndDate = new Date(EndDate);
    if (IsEmptyValue(UnitID)) {
        UnitID = duDay;
    }
    var FullYear = StartDate.getFullYear();
    var Month = StartDate.getMonth();
    var Day = StartDate.getDate();
    var Hour = StartDate.getHours();
    var Min = StartDate.getMinutes();
    var UnitCount = 0;
    var YearsCount = EndDate.getFullYear() - FullYear;
    if (duYear == UnitID) {
        return YearsCount;
    }
    var MonthCount = YearsCount * 12 + (EndDate.getMonth() - Month);
    if (duMon == UnitID) {
        return MonthCount;
    }
    StartDate.setSeconds(0);
    StartDate.setMilliseconds(0);
    EndDate.setSeconds(0);
    EndDate.setMilliseconds(0);
    if (duDay == UnitID) {
        if (!IsCorrectDays) {
            StartDate.setHours(0);
            StartDate.setMinutes(0);
            EndDate.setHours(0);
            EndDate.setMinutes(0);
        }
        var DaysCount = Math.floor((EndDate.getTime()
            - StartDate.getTime())/1000/60/60/24);
        return DaysCount;
    }
    if (duHour == UnitID) {
        var HoursCount = Math.floor((EndDate.getTime()
            - StartDate.getTime())/1000/60/60);
        return HoursCount;
    }
    if (duMin == UnitID) {
        var MinsCount = Math.floor((EndDate.getTime()
            - StartDate.getTime())/1000/60);
        return MinsCount;
    }
}

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

duMin - минуты
duHour - часы
duDay - дни
duMon - месяца
duYear - года

Нравится

Поделиться

2 комментария

Под рукой нет администратора, но по-моему все эти функции описаны в scr_DateUtils, нет?

Там в аналогичной функции GetDateDiffByUnitID нет месяца и года, а также признака IsCorrectDays. А в функции AddDateDays прибавляются только дни.

Показать все комментарии