UNPKG

uno-js

Version:

JS/TS common used functions, zero dependencies

200 lines (199 loc) 7.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.YearWeekIso = exports.YearWeek = exports.YearMonth = exports.YearQuarter = exports.DateRange = exports.formatDateRange = void 0; const weekUtils_1 = require("./weekUtils"); const dateOptions = { month: 'numeric', day: 'numeric', year: 'numeric', }; const formatDateRange = (start, end) => `[${start.toLocaleDateString('en-US', dateOptions)} - ${end.toLocaleDateString('en-US', dateOptions)}]`; exports.formatDateRange = formatDateRange; class DateRange { constructor(startDate, endDate) { this.StartDate = startDate; this.EndDate = endDate; } StartDate; EndDate; get DaysInBetween() { return Math.round(Math.abs(this.EndDate.getTime() - this.StartDate.getTime()) / (1000 * 3600 * 24)); } get Days() { const days = []; const startDate = new Date(this.StartDate); const endDate = new Date(this.EndDate); while (startDate <= endDate) { days.push(new Date(startDate)); startDate.setDate(startDate.getDate() + 1); } return days; } toString() { return (0, exports.formatDateRange)(this.StartDate, this.EndDate); } } exports.DateRange = DateRange; class YearQuarter extends DateRange { constructor(year, quarter) { const actualYear = year ?? new Date().getFullYear(); const actualQuarter = quarter ?? YearQuarter.CurrentQuarter; const startDate = new Date(actualYear, (actualQuarter - 1) * 3, 1); const endDate = new Date(actualYear, actualQuarter * 3, 0); super(startDate, endDate); this.Year = actualYear; this.Quarter = actualQuarter; } Year; Quarter; static get Current() { return new YearQuarter(); } static FromDate(date) { return new YearQuarter(date.getFullYear(), Math.floor(date.getMonth() / 3 + 1)); } static FromString(date) { const [year, quarter] = date.split('-Q'); return new YearQuarter(Number.parseInt(year), Number.parseInt(quarter)); } static get CurrentQuarter() { return Math.floor(new Date().getMonth() / 3 + 1); } get IsCurrent() { return this.Year === new Date().getFullYear() && this.Quarter === YearQuarter.CurrentQuarter; } get Next() { const nextQuarter = this.Quarter + 1; const nextYear = this.Year + (nextQuarter > 4 ? 1 : 0); return new YearQuarter(nextYear, nextQuarter > 4 ? 1 : nextQuarter); } get Previous() { const previousQuarter = this.Quarter - 1; const previousYear = this.Year - (previousQuarter < 1 ? 1 : 0); return new YearQuarter(previousYear, previousQuarter < 1 ? 4 : previousQuarter); } get YearMonths() { return Array.from({ length: 3 }).map((_, i) => new YearMonth(this.Year, this.Quarter * 3 - 2 + i)); } toString() { return `${this.Year}-Q${this.Quarter}`; } } exports.YearQuarter = YearQuarter; class YearMonth extends DateRange { constructor(year, month) { const actualYear = year ?? new Date().getFullYear(); const actualMonth = month ?? new Date().getMonth() + 1; const startDate = new Date(actualYear, actualMonth - 1, 1); const endDate = new Date(actualYear, actualMonth, 0); super(startDate, endDate); this.Year = actualYear; this.Month = actualMonth; } Year; Month; static get Current() { return new YearMonth(); } static FromDate(date) { return new YearMonth(date.getFullYear(), date.getMonth() + 1); } static FromString(date) { const [year, month] = date.split('-'); return new YearMonth(Number.parseInt(year), Number.parseInt(month)); } get IsCurrent() { return this.Year === new Date().getFullYear() && this.Month === new Date().getMonth() + 1; } get Next() { const nextMonth = this.Month + 1; const nextYear = this.Year + (nextMonth > 12 ? 1 : 0); return new YearMonth(nextYear, nextMonth > 12 ? 1 : nextMonth); } get Previous() { const previousMonth = this.Month - 1; const previousYear = this.Year - (previousMonth < 1 ? 1 : 0); return new YearMonth(previousYear, previousMonth < 1 ? 12 : previousMonth); } get YearQuarter() { return YearQuarter.FromDate(this.StartDate); } toString() { return `${this.Year}-${this.Month.toString().padStart(2, '0')}`; } } exports.YearMonth = YearMonth; class YearWeek extends DateRange { constructor(year, week) { const actualYear = year ?? new Date().getFullYear(); const actualWeek = week ?? (0, weekUtils_1.getWeekOfYear)(); const startDate = new Date(actualYear, 0, 1 + (actualWeek - 1) * 7); const endDate = new Date(actualYear, 0, 7 + (actualWeek - 1) * 7); super(startDate, endDate); this.Year = actualYear; this.Week = actualWeek; } Year; Week; static get Current() { return new YearWeek(); } static FromDate(date) { return new YearWeek(date.getFullYear(), (0, weekUtils_1.getWeekNumber)(date)); } static FromString(date) { const [year, week] = date.split('-W'); return new YearWeek(Number.parseInt(year), Number.parseInt(week)); } get Next() { const nextWeek = this.Week + 1; const nextYear = this.Year + (nextWeek > 52 ? 1 : 0); return new YearWeek(nextYear, nextWeek > 52 ? 1 : nextWeek); } get Previous() { const previousWeek = this.Week - 1; const previousYear = this.Year - (previousWeek < 1 ? 1 : 0); return new YearWeek(previousYear, previousWeek < 1 ? 52 : previousWeek); } toString() { return `${this.Year}-W${this.Week.toString().padStart(2, '0')}`; } } exports.YearWeek = YearWeek; class YearWeekIso extends DateRange { constructor(year, week) { const actualYear = year ?? (0, weekUtils_1.getIsoYear)(); const actualWeek = week ?? (0, weekUtils_1.getWeekIsoOfYear)(); const startDate = (0, weekUtils_1.getDateOfISOWeek)(actualWeek, actualYear); const endDate = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + 6); super(startDate, endDate); this.Year = actualYear; this.Week = actualWeek; } Year; Week; static get Current() { return new YearWeekIso(); } static FromDate(date) { return new YearWeekIso(date.getFullYear(), (0, weekUtils_1.getWeekIsoNumber)(date)); } static FromString(date) { const [year, week] = date.split('-W'); return new YearWeekIso(Number.parseInt(year), Number.parseInt(week)); } get Next() { const nextWeek = this.Week + 1; const nextYear = this.Year + (nextWeek > 52 ? 1 : 0); return new YearWeekIso(nextYear, nextWeek > 52 ? 1 : nextWeek); } get Previous() { const previousWeek = this.Week - 1; const previousYear = this.Year - (previousWeek < 1 ? 1 : 0); return new YearWeekIso(previousYear, previousWeek < 1 ? 52 : previousWeek); } toString() { return `${this.Year}-W${this.Week.toString().padStart(2, '0')}`; } } exports.YearWeekIso = YearWeekIso;