onix-core
Version:
Onix library core
66 lines • 2.5 kB
JavaScript
;
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