ts-time-utils 4.0.1 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +175 -30
- package/dist/{age.js → age.cjs} +14 -6
- package/dist/{calculate.js → calculate.cjs} +30 -18
- package/dist/{calendar.js → calendar.cjs} +80 -39
- package/dist/{calendars.js → calendars.cjs} +48 -23
- package/dist/{chain.js → chain.cjs} +41 -40
- package/dist/{compare.js → compare.cjs} +58 -28
- package/dist/constants.cjs +19 -0
- package/dist/{countdown.js → countdown.cjs} +16 -7
- package/dist/{cron.js → cron.cjs} +20 -9
- package/dist/{dateRange.js → dateRange.cjs} +42 -26
- package/dist/{duration.js → duration.cjs} +56 -44
- package/dist/esm/chain.js +0 -5
- package/dist/esm/finance.d.ts +236 -0
- package/dist/esm/finance.d.ts.map +1 -0
- package/dist/esm/finance.js +495 -0
- package/dist/esm/healthcare.d.ts +260 -0
- package/dist/esm/healthcare.d.ts.map +1 -0
- package/dist/esm/healthcare.js +447 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/naturalLanguage.d.ts +1 -3
- package/dist/esm/naturalLanguage.d.ts.map +1 -1
- package/dist/esm/naturalLanguage.js +9 -2
- package/dist/esm/plugins.d.ts +0 -6
- package/dist/esm/plugins.d.ts.map +1 -1
- package/dist/esm/plugins.js +36 -42
- package/dist/esm/recurrence.d.ts.map +1 -1
- package/dist/esm/recurrence.js +3 -5
- package/dist/esm/scheduling.d.ts +206 -0
- package/dist/esm/scheduling.d.ts.map +1 -0
- package/dist/esm/scheduling.js +329 -0
- package/dist/esm/timezone.d.ts +6 -1
- package/dist/esm/timezone.d.ts.map +1 -1
- package/dist/esm/timezone.js +106 -66
- package/dist/esm/types.d.ts +0 -4
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/finance.cjs +512 -0
- package/dist/finance.d.ts +236 -0
- package/dist/finance.d.ts.map +1 -0
- package/dist/{fiscal.js → fiscal.cjs} +36 -17
- package/dist/{format.js → format.cjs} +83 -70
- package/dist/healthcare.cjs +462 -0
- package/dist/healthcare.d.ts +260 -0
- package/dist/healthcare.d.ts.map +1 -0
- package/dist/{holidays.js → holidays.cjs} +52 -25
- package/dist/index.cjs +595 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/{interval.js → interval.cjs} +24 -11
- package/dist/{iterate.js → iterate.cjs} +84 -41
- package/dist/{locale.js → locale.cjs} +54 -26
- package/dist/{naturalLanguage.js → naturalLanguage.cjs} +36 -23
- package/dist/naturalLanguage.d.ts +1 -3
- package/dist/naturalLanguage.d.ts.map +1 -1
- package/dist/{parse.js → parse.cjs} +24 -11
- package/dist/{performance.js → performance.cjs} +23 -10
- package/dist/{plugins.js → plugins.cjs} +48 -47
- package/dist/plugins.d.ts +0 -6
- package/dist/plugins.d.ts.map +1 -1
- package/dist/{precision.js → precision.cjs} +74 -37
- package/dist/{rangePresets.js → rangePresets.cjs} +40 -19
- package/dist/{recurrence.js → recurrence.cjs} +27 -21
- package/dist/recurrence.d.ts.map +1 -1
- package/dist/scheduling.cjs +344 -0
- package/dist/scheduling.d.ts +206 -0
- package/dist/scheduling.d.ts.map +1 -0
- package/dist/{serialize.js → serialize.cjs} +36 -17
- package/dist/{temporal.js → temporal.cjs} +28 -13
- package/dist/{timezone.js → timezone.cjs} +140 -82
- package/dist/timezone.d.ts +6 -1
- package/dist/timezone.d.ts.map +1 -1
- package/dist/{types.js → types.cjs} +9 -3
- package/dist/types.d.ts +0 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/{validate.js → validate.cjs} +54 -26
- package/dist/{workingHours.js → workingHours.cjs} +36 -17
- package/package.json +52 -34
- package/dist/constants.js +0 -16
- package/dist/index.js +0 -66
package/dist/index.d.ts
CHANGED
|
@@ -38,6 +38,12 @@ export { toHebrewDate, toIslamicDate, toBuddhistDate, toJapaneseDate, toPersianD
|
|
|
38
38
|
export type { CalendarDate, HebrewDate, IslamicDate, BuddhistDate, JapaneseDate, PersianDate, ChineseDate, CalendarType } from './calendars.js';
|
|
39
39
|
export { toPlainDate, toPlainTime, toPlainDateTime, toZonedDateTime, toInstant, createDuration as createTemporalDuration, parseDuration as parseTemporalDuration, nowInstant, nowPlainDateTime, nowPlainDate, nowPlainTime, nowZonedDateTime, fromTemporal } from './temporal.js';
|
|
40
40
|
export type { PlainDate, PlainTime, PlainDateTime, ZonedDateTime, Instant, Duration as TemporalDuration, DurationLike, DurationUnit as TemporalDurationUnit } from './temporal.js';
|
|
41
|
+
export { isMarketOpen, isMarketHoliday, isTradingDay, getMarketHours, getMarketOpen, getMarketClose, getNextMarketOpen, getNextMarketClose, getSettlementDate, getTradeDateFromSettlement, eachTradingDay, countTradingDays, addTradingDays, getOptionsExpiration, MARKET_HOURS, US_MARKET_HOLIDAYS } from './finance.js';
|
|
42
|
+
export type { USMarket, MarketHours, OptionsExpirationType } from './finance.js';
|
|
43
|
+
export { generateSlots, generateSlotsForRange, getAvailableSlots, findNextAvailable, isSlotAvailable, findConflicts, hasConflict, addBuffer, removeBuffer, expandRecurringAvailability, mergeBookings, splitSlot, DEFAULT_SCHEDULING_CONFIG } from './scheduling.js';
|
|
44
|
+
export type { SchedulingConfig, Slot, Booking } from './scheduling.js';
|
|
41
45
|
export { createNanosecondTimestamp, fromNanoseconds, dateToNanoseconds, nanosecondsToDate, addNanoseconds, subtractNanoseconds, compareNanoseconds, nowNanoseconds, formatNanoseconds, parseNanoseconds, createHighResDuration, addHighResDuration, subtractHighResDuration, highResDurationToMs, msToHighResDuration, toBigIntMs, fromBigIntMs, toBigIntSeconds, fromBigIntSeconds, addBigIntMs, subtractBigIntMs, diffBigIntMs, isInDSTGap, isInDSTOverlap, getDSTTransitionsInYear, resolveAmbiguousTime, ValidDate, ensureValidDate, parseValidDate, assertValidDate, LEAP_SECONDS, leapSecondsBetween, isNearLeapSecond, taiToUtc, utcToTai } from './precision.js';
|
|
42
46
|
export type { NanosecondTimestamp, HighResDuration, DSTTransition } from './precision.js';
|
|
47
|
+
export { getMedicationTimes, getNextMedicationTime, parseMedicationFrequency, generateShiftSchedule, getShiftForTime, isOnShift, createOnCallRotation, getOnCallStaff, isWithinComplianceWindow, getComplianceDeadline, timeUntilDeadline, calculateRestBetweenShifts, MEDICATION_FREQUENCIES, SHIFT_DURATIONS, DEFAULT_MEDICATION_CONFIG } from './healthcare.js';
|
|
48
|
+
export type { MedicationFrequency, ShiftPattern, ShiftConfig, MedicationConfig, OnCallSlot } from './healthcare.js';
|
|
43
49
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Interval utilities: operations on time intervals [start, end)
|
|
3
4
|
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createInterval = createInterval;
|
|
7
|
+
exports.isValidInterval = isValidInterval;
|
|
8
|
+
exports.intervalDuration = intervalDuration;
|
|
9
|
+
exports.intervalContains = intervalContains;
|
|
10
|
+
exports.intervalsOverlap = intervalsOverlap;
|
|
11
|
+
exports.intervalIntersection = intervalIntersection;
|
|
12
|
+
exports.mergeIntervals = mergeIntervals;
|
|
13
|
+
exports.subtractInterval = subtractInterval;
|
|
14
|
+
exports.splitIntervalByDay = splitIntervalByDay;
|
|
15
|
+
exports.totalIntervalCoverage = totalIntervalCoverage;
|
|
16
|
+
exports.normalizeIntervals = normalizeIntervals;
|
|
4
17
|
/** Create an interval ensuring start <= end */
|
|
5
|
-
|
|
18
|
+
function createInterval(start, end) {
|
|
6
19
|
const s = new Date(start);
|
|
7
20
|
const e = new Date(end);
|
|
8
21
|
if (isNaN(s.getTime()) || isNaN(e.getTime()) || s > e)
|
|
@@ -10,30 +23,30 @@ export function createInterval(start, end) {
|
|
|
10
23
|
return { start: s, end: e };
|
|
11
24
|
}
|
|
12
25
|
/** Validate an object is a proper interval */
|
|
13
|
-
|
|
26
|
+
function isValidInterval(i) {
|
|
14
27
|
return !!i && i.start instanceof Date && i.end instanceof Date && !isNaN(i.start) && !isNaN(i.end) && i.start <= i.end;
|
|
15
28
|
}
|
|
16
29
|
/** Duration of interval in ms */
|
|
17
|
-
|
|
30
|
+
function intervalDuration(i) {
|
|
18
31
|
return i.end.getTime() - i.start.getTime();
|
|
19
32
|
}
|
|
20
33
|
/** Whether interval contains date (inclusive start, exclusive end) */
|
|
21
|
-
|
|
34
|
+
function intervalContains(i, date) {
|
|
22
35
|
const d = date instanceof Date ? date : new Date(date);
|
|
23
36
|
return d >= i.start && d < i.end;
|
|
24
37
|
}
|
|
25
38
|
/** Whether two intervals overlap */
|
|
26
|
-
|
|
39
|
+
function intervalsOverlap(a, b) {
|
|
27
40
|
return a.start < b.end && b.start < a.end;
|
|
28
41
|
}
|
|
29
42
|
/** Intersection of two intervals, or null */
|
|
30
|
-
|
|
43
|
+
function intervalIntersection(a, b) {
|
|
31
44
|
const start = a.start > b.start ? a.start : b.start;
|
|
32
45
|
const end = a.end < b.end ? a.end : b.end;
|
|
33
46
|
return start < end ? { start, end } : null;
|
|
34
47
|
}
|
|
35
48
|
/** Merge overlapping or touching intervals into a minimal set */
|
|
36
|
-
|
|
49
|
+
function mergeIntervals(intervals) {
|
|
37
50
|
if (intervals.length === 0)
|
|
38
51
|
return [];
|
|
39
52
|
const sorted = [...intervals].sort((a, b) => a.start.getTime() - b.start.getTime());
|
|
@@ -54,7 +67,7 @@ export function mergeIntervals(intervals) {
|
|
|
54
67
|
return result;
|
|
55
68
|
}
|
|
56
69
|
/** Subtract interval b from a (can split into 0,1,2 intervals) */
|
|
57
|
-
|
|
70
|
+
function subtractInterval(a, b) {
|
|
58
71
|
if (!intervalsOverlap(a, b))
|
|
59
72
|
return [a];
|
|
60
73
|
const parts = [];
|
|
@@ -65,7 +78,7 @@ export function subtractInterval(a, b) {
|
|
|
65
78
|
return parts;
|
|
66
79
|
}
|
|
67
80
|
/** Split an interval into day-boundary intervals (UTC based) */
|
|
68
|
-
|
|
81
|
+
function splitIntervalByDay(i) {
|
|
69
82
|
const res = [];
|
|
70
83
|
let cursor = new Date(i.start);
|
|
71
84
|
while (cursor < i.end) {
|
|
@@ -77,10 +90,10 @@ export function splitIntervalByDay(i) {
|
|
|
77
90
|
return res;
|
|
78
91
|
}
|
|
79
92
|
/** Total covered duration of possibly overlapping intervals */
|
|
80
|
-
|
|
93
|
+
function totalIntervalCoverage(intervals) {
|
|
81
94
|
return mergeIntervals(intervals).reduce((sum, i) => sum + intervalDuration(i), 0);
|
|
82
95
|
}
|
|
83
96
|
/** Normalize array: filter invalid and merge */
|
|
84
|
-
|
|
97
|
+
function normalizeIntervals(intervals) {
|
|
85
98
|
return mergeIntervals(intervals.filter(isValidInterval));
|
|
86
99
|
}
|
|
@@ -1,6 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* @fileoverview Date iteration utilities for generating date sequences
|
|
3
4
|
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.eachDay = eachDay;
|
|
7
|
+
exports.eachWeekday = eachWeekday;
|
|
8
|
+
exports.eachWeekend = eachWeekend;
|
|
9
|
+
exports.eachWeek = eachWeek;
|
|
10
|
+
exports.eachMonth = eachMonth;
|
|
11
|
+
exports.eachQuarter = eachQuarter;
|
|
12
|
+
exports.eachYear = eachYear;
|
|
13
|
+
exports.eachHour = eachHour;
|
|
14
|
+
exports.eachMinute = eachMinute;
|
|
15
|
+
exports.eachDayOfWeek = eachDayOfWeek;
|
|
16
|
+
exports.eachInterval = eachInterval;
|
|
17
|
+
exports.countDays = countDays;
|
|
18
|
+
exports.countWeekdays = countWeekdays;
|
|
19
|
+
exports.countWeekendDays = countWeekendDays;
|
|
20
|
+
exports.countWeeks = countWeeks;
|
|
21
|
+
exports.countMonths = countMonths;
|
|
22
|
+
exports.iterateDates = iterateDates;
|
|
23
|
+
exports.iterateDays = iterateDays;
|
|
24
|
+
exports.iterateWeekdays = iterateWeekdays;
|
|
25
|
+
exports.iterateMonths = iterateMonths;
|
|
26
|
+
exports.filterDays = filterDays;
|
|
27
|
+
exports.eachMonthEnd = eachMonthEnd;
|
|
28
|
+
exports.eachNthDayOfMonth = eachNthDayOfMonth;
|
|
29
|
+
exports.eachWeekendOfMonth = eachWeekendOfMonth;
|
|
30
|
+
exports.eachWeekendOfYear = eachWeekendOfYear;
|
|
31
|
+
exports.previousDay = previousDay;
|
|
32
|
+
exports.nextDay = nextDay;
|
|
33
|
+
exports.previousSunday = previousSunday;
|
|
34
|
+
exports.previousMonday = previousMonday;
|
|
35
|
+
exports.previousTuesday = previousTuesday;
|
|
36
|
+
exports.previousWednesday = previousWednesday;
|
|
37
|
+
exports.previousThursday = previousThursday;
|
|
38
|
+
exports.previousFriday = previousFriday;
|
|
39
|
+
exports.previousSaturday = previousSaturday;
|
|
40
|
+
exports.nextSunday = nextSunday;
|
|
41
|
+
exports.nextMonday = nextMonday;
|
|
42
|
+
exports.nextTuesday = nextTuesday;
|
|
43
|
+
exports.nextWednesday = nextWednesday;
|
|
44
|
+
exports.nextThursday = nextThursday;
|
|
45
|
+
exports.nextFriday = nextFriday;
|
|
46
|
+
exports.nextSaturday = nextSaturday;
|
|
4
47
|
/**
|
|
5
48
|
* Generate an array of dates for each day in a range
|
|
6
49
|
* @param start - Start date (inclusive)
|
|
@@ -10,7 +53,7 @@
|
|
|
10
53
|
* eachDay(new Date('2024-01-01'), new Date('2024-01-05'))
|
|
11
54
|
* // [Jan 1, Jan 2, Jan 3, Jan 4, Jan 5]
|
|
12
55
|
*/
|
|
13
|
-
|
|
56
|
+
function eachDay(start, end) {
|
|
14
57
|
const result = [];
|
|
15
58
|
const current = new Date(start.getFullYear(), start.getMonth(), start.getDate());
|
|
16
59
|
const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());
|
|
@@ -29,7 +72,7 @@ export function eachDay(start, end) {
|
|
|
29
72
|
* eachWeekday(new Date('2024-01-01'), new Date('2024-01-07'))
|
|
30
73
|
* // [Jan 1 (Mon), Jan 2 (Tue), Jan 3 (Wed), Jan 4 (Thu), Jan 5 (Fri)]
|
|
31
74
|
*/
|
|
32
|
-
|
|
75
|
+
function eachWeekday(start, end) {
|
|
33
76
|
const result = [];
|
|
34
77
|
const current = new Date(start.getFullYear(), start.getMonth(), start.getDate());
|
|
35
78
|
const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());
|
|
@@ -48,7 +91,7 @@ export function eachWeekday(start, end) {
|
|
|
48
91
|
* @param end - End date (inclusive)
|
|
49
92
|
* @returns Array of weekend dates
|
|
50
93
|
*/
|
|
51
|
-
|
|
94
|
+
function eachWeekend(start, end) {
|
|
52
95
|
const result = [];
|
|
53
96
|
const current = new Date(start.getFullYear(), start.getMonth(), start.getDate());
|
|
54
97
|
const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());
|
|
@@ -71,7 +114,7 @@ export function eachWeekend(start, end) {
|
|
|
71
114
|
* eachWeek(new Date('2024-01-01'), new Date('2024-01-31'))
|
|
72
115
|
* // [Jan 7, Jan 14, Jan 21, Jan 28] (Sundays)
|
|
73
116
|
*/
|
|
74
|
-
|
|
117
|
+
function eachWeek(start, end, weekStartsOn = 0) {
|
|
75
118
|
const result = [];
|
|
76
119
|
const current = new Date(start.getFullYear(), start.getMonth(), start.getDate());
|
|
77
120
|
const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());
|
|
@@ -95,7 +138,7 @@ export function eachWeek(start, end, weekStartsOn = 0) {
|
|
|
95
138
|
* eachMonth(new Date('2024-01-15'), new Date('2024-04-15'))
|
|
96
139
|
* // [Feb 1, Mar 1, Apr 1]
|
|
97
140
|
*/
|
|
98
|
-
|
|
141
|
+
function eachMonth(start, end) {
|
|
99
142
|
const result = [];
|
|
100
143
|
const current = new Date(start.getFullYear(), start.getMonth() + 1, 1);
|
|
101
144
|
const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());
|
|
@@ -111,7 +154,7 @@ export function eachMonth(start, end) {
|
|
|
111
154
|
* @param end - End date (inclusive)
|
|
112
155
|
* @returns Array of quarter start dates
|
|
113
156
|
*/
|
|
114
|
-
|
|
157
|
+
function eachQuarter(start, end) {
|
|
115
158
|
const result = [];
|
|
116
159
|
// Start from beginning of next quarter after start date
|
|
117
160
|
const startMonth = start.getMonth();
|
|
@@ -130,7 +173,7 @@ export function eachQuarter(start, end) {
|
|
|
130
173
|
* @param end - End date (inclusive)
|
|
131
174
|
* @returns Array of year start dates
|
|
132
175
|
*/
|
|
133
|
-
|
|
176
|
+
function eachYear(start, end) {
|
|
134
177
|
const result = [];
|
|
135
178
|
const startYear = start.getMonth() === 0 && start.getDate() === 1
|
|
136
179
|
? start.getFullYear()
|
|
@@ -151,7 +194,7 @@ export function eachYear(start, end) {
|
|
|
151
194
|
* eachHour(new Date('2024-01-01T09:00'), new Date('2024-01-01T12:00'))
|
|
152
195
|
* // [9:00, 10:00, 11:00, 12:00]
|
|
153
196
|
*/
|
|
154
|
-
|
|
197
|
+
function eachHour(start, end, step = 1) {
|
|
155
198
|
const result = [];
|
|
156
199
|
const current = new Date(start);
|
|
157
200
|
current.setMinutes(0, 0, 0);
|
|
@@ -171,7 +214,7 @@ export function eachHour(start, end, step = 1) {
|
|
|
171
214
|
* eachMinute(new Date('2024-01-01T09:00'), new Date('2024-01-01T09:05'))
|
|
172
215
|
* // [9:00, 9:01, 9:02, 9:03, 9:04, 9:05]
|
|
173
216
|
*/
|
|
174
|
-
|
|
217
|
+
function eachMinute(start, end, step = 1) {
|
|
175
218
|
const result = [];
|
|
176
219
|
const current = new Date(start);
|
|
177
220
|
current.setSeconds(0, 0);
|
|
@@ -191,7 +234,7 @@ export function eachMinute(start, end, step = 1) {
|
|
|
191
234
|
* eachDayOfWeek(new Date('2024-01-01'), new Date('2024-01-31'), 1)
|
|
192
235
|
* // All Mondays in January 2024
|
|
193
236
|
*/
|
|
194
|
-
|
|
237
|
+
function eachDayOfWeek(start, end, dayOfWeek) {
|
|
195
238
|
const result = [];
|
|
196
239
|
const current = new Date(start.getFullYear(), start.getMonth(), start.getDate());
|
|
197
240
|
const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());
|
|
@@ -215,7 +258,7 @@ export function eachDayOfWeek(start, end, dayOfWeek) {
|
|
|
215
258
|
* eachInterval(start, end, { weeks: 2 }) // Every 2 weeks
|
|
216
259
|
* eachInterval(start, end, { hours: 6 }) // Every 6 hours
|
|
217
260
|
*/
|
|
218
|
-
|
|
261
|
+
function eachInterval(start, end, interval) {
|
|
219
262
|
const result = [];
|
|
220
263
|
const current = new Date(start);
|
|
221
264
|
while (current <= end) {
|
|
@@ -250,7 +293,7 @@ export function eachInterval(start, end, interval) {
|
|
|
250
293
|
* @param end - End date (inclusive)
|
|
251
294
|
* @returns Number of days
|
|
252
295
|
*/
|
|
253
|
-
|
|
296
|
+
function countDays(start, end) {
|
|
254
297
|
const startDay = new Date(start.getFullYear(), start.getMonth(), start.getDate());
|
|
255
298
|
const endDay = new Date(end.getFullYear(), end.getMonth(), end.getDate());
|
|
256
299
|
return Math.round((endDay.getTime() - startDay.getTime()) / 86400000) + 1;
|
|
@@ -261,7 +304,7 @@ export function countDays(start, end) {
|
|
|
261
304
|
* @param end - End date (inclusive)
|
|
262
305
|
* @returns Number of weekdays
|
|
263
306
|
*/
|
|
264
|
-
|
|
307
|
+
function countWeekdays(start, end) {
|
|
265
308
|
return eachWeekday(start, end).length;
|
|
266
309
|
}
|
|
267
310
|
/**
|
|
@@ -270,7 +313,7 @@ export function countWeekdays(start, end) {
|
|
|
270
313
|
* @param end - End date (inclusive)
|
|
271
314
|
* @returns Number of weekend days
|
|
272
315
|
*/
|
|
273
|
-
|
|
316
|
+
function countWeekendDays(start, end) {
|
|
274
317
|
return eachWeekend(start, end).length;
|
|
275
318
|
}
|
|
276
319
|
/**
|
|
@@ -279,7 +322,7 @@ export function countWeekendDays(start, end) {
|
|
|
279
322
|
* @param end - End date (inclusive)
|
|
280
323
|
* @returns Number of weeks
|
|
281
324
|
*/
|
|
282
|
-
|
|
325
|
+
function countWeeks(start, end) {
|
|
283
326
|
const days = countDays(start, end);
|
|
284
327
|
return Math.ceil(days / 7);
|
|
285
328
|
}
|
|
@@ -289,7 +332,7 @@ export function countWeeks(start, end) {
|
|
|
289
332
|
* @param end - End date (inclusive)
|
|
290
333
|
* @returns Number of months (partial months count as 1)
|
|
291
334
|
*/
|
|
292
|
-
|
|
335
|
+
function countMonths(start, end) {
|
|
293
336
|
const yearDiff = end.getFullYear() - start.getFullYear();
|
|
294
337
|
const monthDiff = end.getMonth() - start.getMonth();
|
|
295
338
|
return yearDiff * 12 + monthDiff + 1;
|
|
@@ -301,7 +344,7 @@ export function countMonths(start, end) {
|
|
|
301
344
|
* @param step - Step function to advance the date
|
|
302
345
|
* @yields Date objects
|
|
303
346
|
*/
|
|
304
|
-
|
|
347
|
+
function* iterateDates(start, end, step = (d) => d.setDate(d.getDate() + 1)) {
|
|
305
348
|
const current = new Date(start);
|
|
306
349
|
while (current <= end) {
|
|
307
350
|
yield new Date(current);
|
|
@@ -314,7 +357,7 @@ export function* iterateDates(start, end, step = (d) => d.setDate(d.getDate() +
|
|
|
314
357
|
* @param end - End date
|
|
315
358
|
* @yields Each day in the range
|
|
316
359
|
*/
|
|
317
|
-
|
|
360
|
+
function* iterateDays(start, end) {
|
|
318
361
|
yield* iterateDates(start, end, (d) => d.setDate(d.getDate() + 1));
|
|
319
362
|
}
|
|
320
363
|
/**
|
|
@@ -323,7 +366,7 @@ export function* iterateDays(start, end) {
|
|
|
323
366
|
* @param end - End date
|
|
324
367
|
* @yields Each weekday in the range
|
|
325
368
|
*/
|
|
326
|
-
|
|
369
|
+
function* iterateWeekdays(start, end) {
|
|
327
370
|
const current = new Date(start.getFullYear(), start.getMonth(), start.getDate());
|
|
328
371
|
while (current <= end) {
|
|
329
372
|
const day = current.getDay();
|
|
@@ -339,7 +382,7 @@ export function* iterateWeekdays(start, end) {
|
|
|
339
382
|
* @param end - End date
|
|
340
383
|
* @yields First day of each month in the range
|
|
341
384
|
*/
|
|
342
|
-
|
|
385
|
+
function* iterateMonths(start, end) {
|
|
343
386
|
const current = new Date(start.getFullYear(), start.getMonth(), 1);
|
|
344
387
|
while (current <= end) {
|
|
345
388
|
yield new Date(current);
|
|
@@ -356,7 +399,7 @@ export function* iterateMonths(start, end) {
|
|
|
356
399
|
* // Get all 15th days of each month
|
|
357
400
|
* filterDays(start, end, d => d.getDate() === 15)
|
|
358
401
|
*/
|
|
359
|
-
|
|
402
|
+
function filterDays(start, end, filter) {
|
|
360
403
|
const result = [];
|
|
361
404
|
for (const date of iterateDays(start, end)) {
|
|
362
405
|
if (filter(date)) {
|
|
@@ -371,7 +414,7 @@ export function filterDays(start, end, filter) {
|
|
|
371
414
|
* @param end - End date
|
|
372
415
|
* @returns Array of last-of-month dates
|
|
373
416
|
*/
|
|
374
|
-
|
|
417
|
+
function eachMonthEnd(start, end) {
|
|
375
418
|
const result = [];
|
|
376
419
|
const current = new Date(start.getFullYear(), start.getMonth() + 1, 0);
|
|
377
420
|
const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());
|
|
@@ -392,7 +435,7 @@ export function eachMonthEnd(start, end) {
|
|
|
392
435
|
* eachNthDayOfMonth(start, end, 15) // 15th of each month
|
|
393
436
|
* eachNthDayOfMonth(start, end, 31) // Last day of short months, 31st otherwise
|
|
394
437
|
*/
|
|
395
|
-
|
|
438
|
+
function eachNthDayOfMonth(start, end, dayOfMonth) {
|
|
396
439
|
const result = [];
|
|
397
440
|
let current = new Date(start.getFullYear(), start.getMonth(), 1);
|
|
398
441
|
const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());
|
|
@@ -413,7 +456,7 @@ export function eachNthDayOfMonth(start, end, dayOfMonth) {
|
|
|
413
456
|
* @param month - month (0-11)
|
|
414
457
|
* @returns Array of weekend dates
|
|
415
458
|
*/
|
|
416
|
-
|
|
459
|
+
function eachWeekendOfMonth(year, month) {
|
|
417
460
|
const result = [];
|
|
418
461
|
const daysInMonth = new Date(year, month + 1, 0).getDate();
|
|
419
462
|
for (let day = 1; day <= daysInMonth; day++) {
|
|
@@ -430,7 +473,7 @@ export function eachWeekendOfMonth(year, month) {
|
|
|
430
473
|
* @param year - year
|
|
431
474
|
* @returns Array of weekend dates
|
|
432
475
|
*/
|
|
433
|
-
|
|
476
|
+
function eachWeekendOfYear(year) {
|
|
434
477
|
const result = [];
|
|
435
478
|
for (let month = 0; month < 12; month++) {
|
|
436
479
|
result.push(...eachWeekendOfMonth(year, month));
|
|
@@ -443,7 +486,7 @@ export function eachWeekendOfYear(year) {
|
|
|
443
486
|
* @param dayOfWeek - target day (0=Sunday, 6=Saturday)
|
|
444
487
|
* @returns The previous occurrence (not including date itself)
|
|
445
488
|
*/
|
|
446
|
-
|
|
489
|
+
function previousDay(date, dayOfWeek) {
|
|
447
490
|
const result = new Date(date);
|
|
448
491
|
result.setHours(0, 0, 0, 0);
|
|
449
492
|
const currentDay = result.getDay();
|
|
@@ -457,7 +500,7 @@ export function previousDay(date, dayOfWeek) {
|
|
|
457
500
|
* @param dayOfWeek - target day (0=Sunday, 6=Saturday)
|
|
458
501
|
* @returns The next occurrence (not including date itself)
|
|
459
502
|
*/
|
|
460
|
-
|
|
503
|
+
function nextDay(date, dayOfWeek) {
|
|
461
504
|
const result = new Date(date);
|
|
462
505
|
result.setHours(0, 0, 0, 0);
|
|
463
506
|
const currentDay = result.getDay();
|
|
@@ -466,30 +509,30 @@ export function nextDay(date, dayOfWeek) {
|
|
|
466
509
|
return result;
|
|
467
510
|
}
|
|
468
511
|
/** Get the previous Sunday */
|
|
469
|
-
|
|
512
|
+
function previousSunday(date) { return previousDay(date, 0); }
|
|
470
513
|
/** Get the previous Monday */
|
|
471
|
-
|
|
514
|
+
function previousMonday(date) { return previousDay(date, 1); }
|
|
472
515
|
/** Get the previous Tuesday */
|
|
473
|
-
|
|
516
|
+
function previousTuesday(date) { return previousDay(date, 2); }
|
|
474
517
|
/** Get the previous Wednesday */
|
|
475
|
-
|
|
518
|
+
function previousWednesday(date) { return previousDay(date, 3); }
|
|
476
519
|
/** Get the previous Thursday */
|
|
477
|
-
|
|
520
|
+
function previousThursday(date) { return previousDay(date, 4); }
|
|
478
521
|
/** Get the previous Friday */
|
|
479
|
-
|
|
522
|
+
function previousFriday(date) { return previousDay(date, 5); }
|
|
480
523
|
/** Get the previous Saturday */
|
|
481
|
-
|
|
524
|
+
function previousSaturday(date) { return previousDay(date, 6); }
|
|
482
525
|
/** Get the next Sunday */
|
|
483
|
-
|
|
526
|
+
function nextSunday(date) { return nextDay(date, 0); }
|
|
484
527
|
/** Get the next Monday */
|
|
485
|
-
|
|
528
|
+
function nextMonday(date) { return nextDay(date, 1); }
|
|
486
529
|
/** Get the next Tuesday */
|
|
487
|
-
|
|
530
|
+
function nextTuesday(date) { return nextDay(date, 2); }
|
|
488
531
|
/** Get the next Wednesday */
|
|
489
|
-
|
|
532
|
+
function nextWednesday(date) { return nextDay(date, 3); }
|
|
490
533
|
/** Get the next Thursday */
|
|
491
|
-
|
|
534
|
+
function nextThursday(date) { return nextDay(date, 4); }
|
|
492
535
|
/** Get the next Friday */
|
|
493
|
-
|
|
536
|
+
function nextFriday(date) { return nextDay(date, 5); }
|
|
494
537
|
/** Get the next Saturday */
|
|
495
|
-
|
|
538
|
+
function nextSaturday(date) { return nextDay(date, 6); }
|