uno-js
Version:
JS/TS common used functions, zero dependencies
200 lines (199 loc) • 7.37 kB
JavaScript
"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;