UNPKG

onix-core

Version:
66 lines 2.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.normalize = void 0; const tslib_1 = require("tslib"); const toSafeInteger_1 = tslib_1.__importDefault(require("lodash/toSafeInteger")); function date_range_limit(start, end, adj, a, b, interval) { const result = interval; if (result[a] < start) { result[b] -= toSafeInteger_1.default((start - result[a] - 1) / adj) + 1; result[a] += adj * toSafeInteger_1.default((start - result[a] - 1) / adj + 1); } if (result[a] >= end) { result[b] += toSafeInteger_1.default(result[a] / adj); result[a] -= adj * toSafeInteger_1.default(result[a] / adj); } return result; } function date_range_limit_days(base, result) { const days_in_month_leap = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; const days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // date_range_limit(1, 13, 12, "m", "y", base); let year = base.getFullYear(); let month = base.getMonth(); if (!result.invert) { while (result.d < 0) { month--; if (month < 0) { month += 12; year--; } const leapyear = year % 400 == 0 || (year % 100 != 0 && year % 4 == 0); const days = leapyear ? days_in_month_leap[month] : days_in_month[month]; result.d += days; result.m--; } } else { while (result.d < 0) { const leapyear = year % 400 == 0 || (year % 100 != 0 && year % 4 == 0); const days = leapyear ? days_in_month_leap[month] : days_in_month[month]; result.d += days; result.m--; month++; if (month > 11) { month -= 12; year++; } } } return result; } function normalize(interval, base) { if (base === undefined) { base = new Date(); } interval = date_range_limit(0, 1000, 1000, "f", "s", interval); interval = date_range_limit(0, 60, 60, "s", "i", interval); interval = date_range_limit(0, 60, 60, "i", "h", interval); interval = date_range_limit(0, 24, 24, "h", "d", interval); interval = date_range_limit(0, 12, 12, "m", "y", interval); interval = date_range_limit_days(base, interval); interval = date_range_limit(0, 12, 12, "m", "y", interval); return interval; } exports.normalize = normalize; //# sourceMappingURL=DateInterval.js.map