@exyconn/common 2.0.0 → 2.3.2
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 +864 -261
- package/dist/{index-BLltj-zN.d.ts → client/hooks/index.d.mts} +1 -195
- package/dist/{index-CIUdLBjA.d.mts → client/hooks/index.d.ts} +1 -195
- package/dist/client/hooks/index.js +2276 -0
- package/dist/client/hooks/index.js.map +1 -0
- package/dist/client/hooks/index.mjs +2217 -0
- package/dist/client/hooks/index.mjs.map +1 -0
- package/dist/client/index.d.mts +4 -1
- package/dist/client/index.d.ts +4 -1
- package/dist/client/index.js +2693 -19
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +2634 -21
- package/dist/client/index.mjs.map +1 -1
- package/dist/client/web/index.d.mts +1461 -0
- package/dist/client/web/index.d.ts +1461 -0
- package/dist/client/web/index.js +2681 -0
- package/dist/client/web/index.js.map +1 -0
- package/dist/client/web/index.mjs +2618 -0
- package/dist/client/web/index.mjs.map +1 -0
- package/dist/data/brand-identity.d.mts +149 -0
- package/dist/data/brand-identity.d.ts +149 -0
- package/dist/data/brand-identity.js +235 -0
- package/dist/data/brand-identity.js.map +1 -0
- package/dist/data/brand-identity.mjs +220 -0
- package/dist/data/brand-identity.mjs.map +1 -0
- package/dist/data/countries.d.mts +61 -0
- package/dist/data/countries.d.ts +61 -0
- package/dist/data/countries.js +987 -0
- package/dist/data/countries.js.map +1 -0
- package/dist/data/countries.mjs +971 -0
- package/dist/data/countries.mjs.map +1 -0
- package/dist/data/currencies.d.mts +19 -0
- package/dist/data/currencies.d.ts +19 -0
- package/dist/data/currencies.js +162 -0
- package/dist/data/currencies.js.map +1 -0
- package/dist/data/currencies.mjs +153 -0
- package/dist/data/currencies.mjs.map +1 -0
- package/dist/data/index.d.mts +7 -0
- package/dist/data/index.d.ts +7 -0
- package/dist/data/index.js +2087 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/index.mjs +1948 -0
- package/dist/data/index.mjs.map +1 -0
- package/dist/data/phone-codes.d.mts +15 -0
- package/dist/data/phone-codes.d.ts +15 -0
- package/dist/data/phone-codes.js +219 -0
- package/dist/data/phone-codes.js.map +1 -0
- package/dist/data/phone-codes.mjs +211 -0
- package/dist/data/phone-codes.mjs.map +1 -0
- package/dist/data/regex.d.mts +287 -0
- package/dist/data/regex.d.ts +287 -0
- package/dist/data/regex.js +306 -0
- package/dist/data/regex.js.map +1 -0
- package/dist/data/regex.mjs +208 -0
- package/dist/data/regex.mjs.map +1 -0
- package/dist/data/timezones.d.mts +16 -0
- package/dist/data/timezones.d.ts +16 -0
- package/dist/data/timezones.js +98 -0
- package/dist/data/timezones.js.map +1 -0
- package/dist/data/timezones.mjs +89 -0
- package/dist/data/timezones.mjs.map +1 -0
- package/dist/index-01hoqibP.d.ts +119 -0
- package/dist/index-D3yCCjBZ.d.mts +119 -0
- package/dist/index-D9a9oxQy.d.ts +305 -0
- package/dist/index-DKn4raO7.d.ts +222 -0
- package/dist/index-DuxL84IW.d.mts +305 -0
- package/dist/index-NS8dS0p9.d.mts +222 -0
- package/dist/index-Nqm5_lwT.d.ts +188 -0
- package/dist/index-jBi3V6e5.d.mts +188 -0
- package/dist/index.d.mts +21 -729
- package/dist/index.d.ts +21 -729
- package/dist/index.js +3470 -97
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3457 -104
- package/dist/index.mjs.map +1 -1
- package/dist/server/configs/index.d.mts +602 -0
- package/dist/server/configs/index.d.ts +602 -0
- package/dist/server/configs/index.js +707 -0
- package/dist/server/configs/index.js.map +1 -0
- package/dist/server/configs/index.mjs +665 -0
- package/dist/server/configs/index.mjs.map +1 -0
- package/dist/server/index.d.mts +3 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.js +699 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +662 -1
- package/dist/server/index.mjs.map +1 -1
- package/dist/shared/config/index.d.mts +40 -0
- package/dist/shared/config/index.d.ts +40 -0
- package/dist/shared/config/index.js +58 -0
- package/dist/shared/config/index.js.map +1 -0
- package/dist/shared/config/index.mjs +51 -0
- package/dist/shared/config/index.mjs.map +1 -0
- package/dist/shared/constants/index.d.mts +593 -0
- package/dist/shared/constants/index.d.ts +593 -0
- package/dist/shared/constants/index.js +391 -0
- package/dist/shared/constants/index.js.map +1 -0
- package/dist/shared/constants/index.mjs +360 -0
- package/dist/shared/constants/index.mjs.map +1 -0
- package/dist/shared/index.d.mts +5 -1
- package/dist/shared/index.d.ts +5 -1
- package/dist/shared/types/index.d.mts +140 -0
- package/dist/shared/types/index.d.ts +140 -0
- package/dist/shared/types/index.js +4 -0
- package/dist/shared/types/index.js.map +1 -0
- package/dist/shared/types/index.mjs +3 -0
- package/dist/shared/types/index.mjs.map +1 -0
- package/dist/shared/utils/index.d.mts +255 -0
- package/dist/shared/utils/index.d.ts +255 -0
- package/dist/shared/utils/index.js +623 -0
- package/dist/shared/utils/index.js.map +1 -0
- package/dist/shared/utils/index.mjs +324 -0
- package/dist/shared/utils/index.mjs.map +1 -0
- package/dist/shared/validation/index.d.mts +258 -0
- package/dist/shared/validation/index.d.ts +258 -0
- package/dist/shared/validation/index.js +185 -0
- package/dist/shared/validation/index.js.map +1 -0
- package/dist/shared/validation/index.mjs +172 -0
- package/dist/shared/validation/index.mjs.map +1 -0
- package/package.json +151 -56
- package/dist/index-DEzgM15j.d.ts +0 -67
- package/dist/index-DNFVgQx8.d.ts +0 -1375
- package/dist/index-DbV04Dx8.d.mts +0 -67
- package/dist/index-DfqEP6Oe.d.mts +0 -1375
|
@@ -0,0 +1,623 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var dateFns = require('date-fns');
|
|
4
|
+
var dateFnsTz = require('date-fns-tz');
|
|
5
|
+
|
|
6
|
+
// src/shared/utils/date-time.ts
|
|
7
|
+
var parseDate = (date) => {
|
|
8
|
+
if (date instanceof Date) return date;
|
|
9
|
+
if (typeof date === "string") return dateFns.parseISO(date);
|
|
10
|
+
return new Date(date);
|
|
11
|
+
};
|
|
12
|
+
var isValidDate = (date) => {
|
|
13
|
+
const parsed = parseDate(date);
|
|
14
|
+
return dateFns.isValid(parsed);
|
|
15
|
+
};
|
|
16
|
+
var DATE_FORMATS = {
|
|
17
|
+
// Date only
|
|
18
|
+
DATE_SHORT: "MM/dd/yyyy",
|
|
19
|
+
// 01/15/2026
|
|
20
|
+
DATE_MEDIUM: "MMM d, yyyy",
|
|
21
|
+
// Jan 15, 2026
|
|
22
|
+
DATE_LONG: "MMMM d, yyyy",
|
|
23
|
+
// January 15, 2026
|
|
24
|
+
DATE_FULL: "EEEE, MMMM d, yyyy",
|
|
25
|
+
// Friday, January 15, 2026
|
|
26
|
+
DATE_ISO: "yyyy-MM-dd",
|
|
27
|
+
// 2026-01-15
|
|
28
|
+
// Time only
|
|
29
|
+
TIME_SHORT: "h:mm a",
|
|
30
|
+
// 3:30 PM
|
|
31
|
+
TIME_MEDIUM: "h:mm:ss a",
|
|
32
|
+
// 3:30:45 PM
|
|
33
|
+
TIME_24H: "HH:mm",
|
|
34
|
+
// 15:30
|
|
35
|
+
TIME_24H_FULL: "HH:mm:ss",
|
|
36
|
+
// 15:30:45
|
|
37
|
+
// Date and time
|
|
38
|
+
DATETIME_SHORT: "MM/dd/yyyy h:mm a",
|
|
39
|
+
// 01/15/2026 3:30 PM
|
|
40
|
+
DATETIME_MEDIUM: "MMM d, yyyy h:mm a",
|
|
41
|
+
// Jan 15, 2026 3:30 PM
|
|
42
|
+
DATETIME_LONG: "MMMM d, yyyy h:mm a",
|
|
43
|
+
// January 15, 2026 3:30 PM
|
|
44
|
+
DATETIME_FULL: "EEEE, MMMM d, yyyy h:mm a",
|
|
45
|
+
// Friday, January 15, 2026 3:30 PM
|
|
46
|
+
DATETIME_ISO: "yyyy-MM-dd'T'HH:mm:ss",
|
|
47
|
+
// 2026-01-15T15:30:45
|
|
48
|
+
// Special formats
|
|
49
|
+
MONTH_YEAR: "MMMM yyyy",
|
|
50
|
+
// January 2026
|
|
51
|
+
MONTH_DAY: "MMM d",
|
|
52
|
+
// Jan 15
|
|
53
|
+
DAY_MONTH: "d MMM",
|
|
54
|
+
// 15 Jan
|
|
55
|
+
WEEKDAY: "EEEE",
|
|
56
|
+
// Friday
|
|
57
|
+
WEEKDAY_SHORT: "EEE"
|
|
58
|
+
// Fri
|
|
59
|
+
};
|
|
60
|
+
var formatDate = (date, formatStr = DATE_FORMATS.DATE_MEDIUM) => {
|
|
61
|
+
return dateFns.format(parseDate(date), formatStr);
|
|
62
|
+
};
|
|
63
|
+
var formatDateTime = (date, formatStr = DATE_FORMATS.DATETIME_MEDIUM) => {
|
|
64
|
+
return dateFns.format(parseDate(date), formatStr);
|
|
65
|
+
};
|
|
66
|
+
var formatDateInTimezone = (date, timezone, formatStr = DATE_FORMATS.DATETIME_MEDIUM) => {
|
|
67
|
+
return dateFnsTz.formatInTimeZone(parseDate(date), timezone, formatStr);
|
|
68
|
+
};
|
|
69
|
+
var formatRelativeTime = (date, baseDate) => {
|
|
70
|
+
const parsed = parseDate(date);
|
|
71
|
+
if (baseDate) {
|
|
72
|
+
return dateFns.formatDistance(parsed, parseDate(baseDate), { addSuffix: true });
|
|
73
|
+
}
|
|
74
|
+
return dateFns.formatDistanceToNow(parsed, { addSuffix: true });
|
|
75
|
+
};
|
|
76
|
+
var formatSmartDate = (date) => {
|
|
77
|
+
const parsed = parseDate(date);
|
|
78
|
+
if (dateFns.isToday(parsed)) {
|
|
79
|
+
return `Today at ${dateFns.format(parsed, DATE_FORMATS.TIME_SHORT)}`;
|
|
80
|
+
}
|
|
81
|
+
if (dateFns.isYesterday(parsed)) {
|
|
82
|
+
return `Yesterday at ${dateFns.format(parsed, DATE_FORMATS.TIME_SHORT)}`;
|
|
83
|
+
}
|
|
84
|
+
if (dateFns.isTomorrow(parsed)) {
|
|
85
|
+
return `Tomorrow at ${dateFns.format(parsed, DATE_FORMATS.TIME_SHORT)}`;
|
|
86
|
+
}
|
|
87
|
+
if (dateFns.isThisWeek(parsed)) {
|
|
88
|
+
return dateFns.format(parsed, "EEEE 'at' h:mm a");
|
|
89
|
+
}
|
|
90
|
+
if (dateFns.isThisYear(parsed)) {
|
|
91
|
+
return dateFns.format(parsed, "MMM d 'at' h:mm a");
|
|
92
|
+
}
|
|
93
|
+
return dateFns.format(parsed, DATE_FORMATS.DATETIME_MEDIUM);
|
|
94
|
+
};
|
|
95
|
+
var formatDateRange = (start, end) => {
|
|
96
|
+
const duration = dateFns.intervalToDuration({
|
|
97
|
+
start: parseDate(start),
|
|
98
|
+
end: parseDate(end)
|
|
99
|
+
});
|
|
100
|
+
return dateFns.formatDuration(duration, {
|
|
101
|
+
format: ["years", "months", "days", "hours", "minutes"]
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
var toTimezone = (date, timezone) => {
|
|
105
|
+
return dateFnsTz.toZonedTime(parseDate(date), timezone);
|
|
106
|
+
};
|
|
107
|
+
var fromTimezone = (date, timezone) => {
|
|
108
|
+
return dateFnsTz.fromZonedTime(parseDate(date), timezone);
|
|
109
|
+
};
|
|
110
|
+
var nowInTimezone = (timezone) => {
|
|
111
|
+
return dateFnsTz.toZonedTime(/* @__PURE__ */ new Date(), timezone);
|
|
112
|
+
};
|
|
113
|
+
var getTimezoneDifference = (timezone1, timezone2) => {
|
|
114
|
+
const now = /* @__PURE__ */ new Date();
|
|
115
|
+
const time1 = dateFnsTz.toZonedTime(now, timezone1);
|
|
116
|
+
const time2 = dateFnsTz.toZonedTime(now, timezone2);
|
|
117
|
+
const diffMinutes = dateFns.differenceInMinutes(time1, time2);
|
|
118
|
+
const hours = Math.floor(Math.abs(diffMinutes) / 60);
|
|
119
|
+
const minutes = Math.abs(diffMinutes) % 60;
|
|
120
|
+
const sign = diffMinutes >= 0 ? "+" : "-";
|
|
121
|
+
if (minutes === 0) {
|
|
122
|
+
return `${sign}${hours}h`;
|
|
123
|
+
}
|
|
124
|
+
return `${sign}${hours}h ${minutes}m`;
|
|
125
|
+
};
|
|
126
|
+
var addTime = (date, amount, unit) => {
|
|
127
|
+
const parsed = parseDate(date);
|
|
128
|
+
switch (unit) {
|
|
129
|
+
case "minutes":
|
|
130
|
+
return dateFns.addMinutes(parsed, amount);
|
|
131
|
+
case "hours":
|
|
132
|
+
return dateFns.addHours(parsed, amount);
|
|
133
|
+
case "days":
|
|
134
|
+
return dateFns.addDays(parsed, amount);
|
|
135
|
+
case "weeks":
|
|
136
|
+
return dateFns.addWeeks(parsed, amount);
|
|
137
|
+
case "months":
|
|
138
|
+
return dateFns.addMonths(parsed, amount);
|
|
139
|
+
case "years":
|
|
140
|
+
return dateFns.addYears(parsed, amount);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
var subtractTime = (date, amount, unit) => {
|
|
144
|
+
const parsed = parseDate(date);
|
|
145
|
+
switch (unit) {
|
|
146
|
+
case "minutes":
|
|
147
|
+
return dateFns.subMinutes(parsed, amount);
|
|
148
|
+
case "hours":
|
|
149
|
+
return dateFns.subHours(parsed, amount);
|
|
150
|
+
case "days":
|
|
151
|
+
return dateFns.subDays(parsed, amount);
|
|
152
|
+
case "weeks":
|
|
153
|
+
return dateFns.subWeeks(parsed, amount);
|
|
154
|
+
case "months":
|
|
155
|
+
return dateFns.subMonths(parsed, amount);
|
|
156
|
+
case "years":
|
|
157
|
+
return dateFns.subYears(parsed, amount);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
var getDateDifference = (date1, date2, unit) => {
|
|
161
|
+
const d1 = parseDate(date1);
|
|
162
|
+
const d2 = parseDate(date2);
|
|
163
|
+
switch (unit) {
|
|
164
|
+
case "seconds":
|
|
165
|
+
return dateFns.differenceInSeconds(d1, d2);
|
|
166
|
+
case "minutes":
|
|
167
|
+
return dateFns.differenceInMinutes(d1, d2);
|
|
168
|
+
case "hours":
|
|
169
|
+
return dateFns.differenceInHours(d1, d2);
|
|
170
|
+
case "days":
|
|
171
|
+
return dateFns.differenceInDays(d1, d2);
|
|
172
|
+
case "weeks":
|
|
173
|
+
return dateFns.differenceInWeeks(d1, d2);
|
|
174
|
+
case "months":
|
|
175
|
+
return dateFns.differenceInMonths(d1, d2);
|
|
176
|
+
case "years":
|
|
177
|
+
return dateFns.differenceInYears(d1, d2);
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
var getDaysInRange = (start, end) => {
|
|
181
|
+
return dateFns.eachDayOfInterval({
|
|
182
|
+
start: parseDate(start),
|
|
183
|
+
end: parseDate(end)
|
|
184
|
+
});
|
|
185
|
+
};
|
|
186
|
+
var getWeeksInRange = (start, end) => {
|
|
187
|
+
return dateFns.eachWeekOfInterval({
|
|
188
|
+
start: parseDate(start),
|
|
189
|
+
end: parseDate(end)
|
|
190
|
+
});
|
|
191
|
+
};
|
|
192
|
+
var getMonthsInRange = (start, end) => {
|
|
193
|
+
return dateFns.eachMonthOfInterval({
|
|
194
|
+
start: parseDate(start),
|
|
195
|
+
end: parseDate(end)
|
|
196
|
+
});
|
|
197
|
+
};
|
|
198
|
+
var getDayBoundaries = (date) => {
|
|
199
|
+
const parsed = parseDate(date);
|
|
200
|
+
return {
|
|
201
|
+
start: dateFns.startOfDay(parsed),
|
|
202
|
+
end: dateFns.endOfDay(parsed)
|
|
203
|
+
};
|
|
204
|
+
};
|
|
205
|
+
var getWeekBoundaries = (date, weekStartsOn = 0) => {
|
|
206
|
+
const parsed = parseDate(date);
|
|
207
|
+
return {
|
|
208
|
+
start: dateFns.startOfWeek(parsed, { weekStartsOn }),
|
|
209
|
+
end: dateFns.endOfWeek(parsed, { weekStartsOn })
|
|
210
|
+
};
|
|
211
|
+
};
|
|
212
|
+
var getMonthBoundaries = (date) => {
|
|
213
|
+
const parsed = parseDate(date);
|
|
214
|
+
return {
|
|
215
|
+
start: dateFns.startOfMonth(parsed),
|
|
216
|
+
end: dateFns.endOfMonth(parsed)
|
|
217
|
+
};
|
|
218
|
+
};
|
|
219
|
+
var getYearBoundaries = (date) => {
|
|
220
|
+
const parsed = parseDate(date);
|
|
221
|
+
return {
|
|
222
|
+
start: dateFns.startOfYear(parsed),
|
|
223
|
+
end: dateFns.endOfYear(parsed)
|
|
224
|
+
};
|
|
225
|
+
};
|
|
226
|
+
var isDateBetween = (date, start, end) => {
|
|
227
|
+
const d = parseDate(date);
|
|
228
|
+
const s = parseDate(start);
|
|
229
|
+
const e = parseDate(end);
|
|
230
|
+
return (dateFns.isAfter(d, s) || dateFns.isEqual(d, s)) && (dateFns.isBefore(d, e) || dateFns.isEqual(d, e));
|
|
231
|
+
};
|
|
232
|
+
var doDateRangesOverlap = (range1Start, range1End, range2Start, range2End) => {
|
|
233
|
+
const r1s = parseDate(range1Start);
|
|
234
|
+
const r1e = parseDate(range1End);
|
|
235
|
+
const r2s = parseDate(range2Start);
|
|
236
|
+
const r2e = parseDate(range2End);
|
|
237
|
+
return dateFns.isBefore(r1s, r2e) && dateFns.isAfter(r1e, r2s);
|
|
238
|
+
};
|
|
239
|
+
var getAge = (birthDate) => {
|
|
240
|
+
return dateFns.differenceInYears(/* @__PURE__ */ new Date(), parseDate(birthDate));
|
|
241
|
+
};
|
|
242
|
+
var isWeekend = (date) => {
|
|
243
|
+
const day = dateFns.getDay(parseDate(date));
|
|
244
|
+
return day === 0 || day === 6;
|
|
245
|
+
};
|
|
246
|
+
var isWeekday = (date) => {
|
|
247
|
+
return !isWeekend(date);
|
|
248
|
+
};
|
|
249
|
+
var daysUntil = (date) => {
|
|
250
|
+
return dateFns.differenceInDays(parseDate(date), /* @__PURE__ */ new Date());
|
|
251
|
+
};
|
|
252
|
+
var daysSince = (date) => {
|
|
253
|
+
return dateFns.differenceInDays(/* @__PURE__ */ new Date(), parseDate(date));
|
|
254
|
+
};
|
|
255
|
+
var toDateInputValue = (date) => {
|
|
256
|
+
return dateFns.format(parseDate(date), DATE_FORMATS.DATE_ISO);
|
|
257
|
+
};
|
|
258
|
+
var toDateTimeInputValue = (date) => {
|
|
259
|
+
return dateFns.format(parseDate(date), "yyyy-MM-dd'T'HH:mm");
|
|
260
|
+
};
|
|
261
|
+
var toTimeInputValue = (date) => {
|
|
262
|
+
return dateFns.format(parseDate(date), DATE_FORMATS.TIME_24H);
|
|
263
|
+
};
|
|
264
|
+
var setTime = (date, hours, minutes, seconds = 0) => {
|
|
265
|
+
let result = parseDate(date);
|
|
266
|
+
result = dateFns.setHours(result, hours);
|
|
267
|
+
result = dateFns.setMinutes(result, minutes);
|
|
268
|
+
result = dateFns.setSeconds(result, seconds);
|
|
269
|
+
return result;
|
|
270
|
+
};
|
|
271
|
+
var combineDateAndTime = (dateInput, timeInput) => {
|
|
272
|
+
const date = parseDate(dateInput);
|
|
273
|
+
const time = parseDate(timeInput);
|
|
274
|
+
return setTime(date, dateFns.getHours(time), dateFns.getMinutes(time), dateFns.getSeconds(time));
|
|
275
|
+
};
|
|
276
|
+
var date_time_default = {
|
|
277
|
+
// Core
|
|
278
|
+
parseDate,
|
|
279
|
+
isValidDate,
|
|
280
|
+
DATE_FORMATS,
|
|
281
|
+
// Format
|
|
282
|
+
formatDate,
|
|
283
|
+
formatDateTime,
|
|
284
|
+
formatDateInTimezone,
|
|
285
|
+
formatRelativeTime,
|
|
286
|
+
formatSmartDate,
|
|
287
|
+
formatDateRange,
|
|
288
|
+
// Timezone
|
|
289
|
+
toTimezone,
|
|
290
|
+
fromTimezone,
|
|
291
|
+
nowInTimezone,
|
|
292
|
+
getTimezoneDifference,
|
|
293
|
+
// Arithmetic
|
|
294
|
+
addTime,
|
|
295
|
+
subtractTime,
|
|
296
|
+
getDateDifference,
|
|
297
|
+
// Ranges
|
|
298
|
+
getDaysInRange,
|
|
299
|
+
getWeeksInRange,
|
|
300
|
+
getMonthsInRange,
|
|
301
|
+
// Boundaries
|
|
302
|
+
getDayBoundaries,
|
|
303
|
+
getWeekBoundaries,
|
|
304
|
+
getMonthBoundaries,
|
|
305
|
+
getYearBoundaries,
|
|
306
|
+
// Comparison
|
|
307
|
+
isDateBetween,
|
|
308
|
+
doDateRangesOverlap,
|
|
309
|
+
// Utilities
|
|
310
|
+
getAge,
|
|
311
|
+
isWeekend,
|
|
312
|
+
isWeekday,
|
|
313
|
+
daysUntil,
|
|
314
|
+
daysSince,
|
|
315
|
+
toDateInputValue,
|
|
316
|
+
toDateTimeInputValue,
|
|
317
|
+
toTimeInputValue,
|
|
318
|
+
setTime,
|
|
319
|
+
combineDateAndTime
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
Object.defineProperty(exports, "addDays", {
|
|
323
|
+
enumerable: true,
|
|
324
|
+
get: function () { return dateFns.addDays; }
|
|
325
|
+
});
|
|
326
|
+
Object.defineProperty(exports, "addHours", {
|
|
327
|
+
enumerable: true,
|
|
328
|
+
get: function () { return dateFns.addHours; }
|
|
329
|
+
});
|
|
330
|
+
Object.defineProperty(exports, "addMinutes", {
|
|
331
|
+
enumerable: true,
|
|
332
|
+
get: function () { return dateFns.addMinutes; }
|
|
333
|
+
});
|
|
334
|
+
Object.defineProperty(exports, "addMonths", {
|
|
335
|
+
enumerable: true,
|
|
336
|
+
get: function () { return dateFns.addMonths; }
|
|
337
|
+
});
|
|
338
|
+
Object.defineProperty(exports, "addWeeks", {
|
|
339
|
+
enumerable: true,
|
|
340
|
+
get: function () { return dateFns.addWeeks; }
|
|
341
|
+
});
|
|
342
|
+
Object.defineProperty(exports, "addYears", {
|
|
343
|
+
enumerable: true,
|
|
344
|
+
get: function () { return dateFns.addYears; }
|
|
345
|
+
});
|
|
346
|
+
Object.defineProperty(exports, "differenceInDays", {
|
|
347
|
+
enumerable: true,
|
|
348
|
+
get: function () { return dateFns.differenceInDays; }
|
|
349
|
+
});
|
|
350
|
+
Object.defineProperty(exports, "differenceInHours", {
|
|
351
|
+
enumerable: true,
|
|
352
|
+
get: function () { return dateFns.differenceInHours; }
|
|
353
|
+
});
|
|
354
|
+
Object.defineProperty(exports, "differenceInMinutes", {
|
|
355
|
+
enumerable: true,
|
|
356
|
+
get: function () { return dateFns.differenceInMinutes; }
|
|
357
|
+
});
|
|
358
|
+
Object.defineProperty(exports, "differenceInMonths", {
|
|
359
|
+
enumerable: true,
|
|
360
|
+
get: function () { return dateFns.differenceInMonths; }
|
|
361
|
+
});
|
|
362
|
+
Object.defineProperty(exports, "differenceInSeconds", {
|
|
363
|
+
enumerable: true,
|
|
364
|
+
get: function () { return dateFns.differenceInSeconds; }
|
|
365
|
+
});
|
|
366
|
+
Object.defineProperty(exports, "differenceInWeeks", {
|
|
367
|
+
enumerable: true,
|
|
368
|
+
get: function () { return dateFns.differenceInWeeks; }
|
|
369
|
+
});
|
|
370
|
+
Object.defineProperty(exports, "differenceInYears", {
|
|
371
|
+
enumerable: true,
|
|
372
|
+
get: function () { return dateFns.differenceInYears; }
|
|
373
|
+
});
|
|
374
|
+
Object.defineProperty(exports, "eachDayOfInterval", {
|
|
375
|
+
enumerable: true,
|
|
376
|
+
get: function () { return dateFns.eachDayOfInterval; }
|
|
377
|
+
});
|
|
378
|
+
Object.defineProperty(exports, "eachMonthOfInterval", {
|
|
379
|
+
enumerable: true,
|
|
380
|
+
get: function () { return dateFns.eachMonthOfInterval; }
|
|
381
|
+
});
|
|
382
|
+
Object.defineProperty(exports, "eachWeekOfInterval", {
|
|
383
|
+
enumerable: true,
|
|
384
|
+
get: function () { return dateFns.eachWeekOfInterval; }
|
|
385
|
+
});
|
|
386
|
+
Object.defineProperty(exports, "endOfDay", {
|
|
387
|
+
enumerable: true,
|
|
388
|
+
get: function () { return dateFns.endOfDay; }
|
|
389
|
+
});
|
|
390
|
+
Object.defineProperty(exports, "endOfMonth", {
|
|
391
|
+
enumerable: true,
|
|
392
|
+
get: function () { return dateFns.endOfMonth; }
|
|
393
|
+
});
|
|
394
|
+
Object.defineProperty(exports, "endOfWeek", {
|
|
395
|
+
enumerable: true,
|
|
396
|
+
get: function () { return dateFns.endOfWeek; }
|
|
397
|
+
});
|
|
398
|
+
Object.defineProperty(exports, "endOfYear", {
|
|
399
|
+
enumerable: true,
|
|
400
|
+
get: function () { return dateFns.endOfYear; }
|
|
401
|
+
});
|
|
402
|
+
Object.defineProperty(exports, "format", {
|
|
403
|
+
enumerable: true,
|
|
404
|
+
get: function () { return dateFns.format; }
|
|
405
|
+
});
|
|
406
|
+
Object.defineProperty(exports, "formatDistance", {
|
|
407
|
+
enumerable: true,
|
|
408
|
+
get: function () { return dateFns.formatDistance; }
|
|
409
|
+
});
|
|
410
|
+
Object.defineProperty(exports, "formatDistanceToNow", {
|
|
411
|
+
enumerable: true,
|
|
412
|
+
get: function () { return dateFns.formatDistanceToNow; }
|
|
413
|
+
});
|
|
414
|
+
Object.defineProperty(exports, "formatDuration", {
|
|
415
|
+
enumerable: true,
|
|
416
|
+
get: function () { return dateFns.formatDuration; }
|
|
417
|
+
});
|
|
418
|
+
Object.defineProperty(exports, "formatRelative", {
|
|
419
|
+
enumerable: true,
|
|
420
|
+
get: function () { return dateFns.formatRelative; }
|
|
421
|
+
});
|
|
422
|
+
Object.defineProperty(exports, "getDate", {
|
|
423
|
+
enumerable: true,
|
|
424
|
+
get: function () { return dateFns.getDate; }
|
|
425
|
+
});
|
|
426
|
+
Object.defineProperty(exports, "getDay", {
|
|
427
|
+
enumerable: true,
|
|
428
|
+
get: function () { return dateFns.getDay; }
|
|
429
|
+
});
|
|
430
|
+
Object.defineProperty(exports, "getHours", {
|
|
431
|
+
enumerable: true,
|
|
432
|
+
get: function () { return dateFns.getHours; }
|
|
433
|
+
});
|
|
434
|
+
Object.defineProperty(exports, "getMinutes", {
|
|
435
|
+
enumerable: true,
|
|
436
|
+
get: function () { return dateFns.getMinutes; }
|
|
437
|
+
});
|
|
438
|
+
Object.defineProperty(exports, "getMonth", {
|
|
439
|
+
enumerable: true,
|
|
440
|
+
get: function () { return dateFns.getMonth; }
|
|
441
|
+
});
|
|
442
|
+
Object.defineProperty(exports, "getSeconds", {
|
|
443
|
+
enumerable: true,
|
|
444
|
+
get: function () { return dateFns.getSeconds; }
|
|
445
|
+
});
|
|
446
|
+
Object.defineProperty(exports, "getYear", {
|
|
447
|
+
enumerable: true,
|
|
448
|
+
get: function () { return dateFns.getYear; }
|
|
449
|
+
});
|
|
450
|
+
Object.defineProperty(exports, "intervalToDuration", {
|
|
451
|
+
enumerable: true,
|
|
452
|
+
get: function () { return dateFns.intervalToDuration; }
|
|
453
|
+
});
|
|
454
|
+
Object.defineProperty(exports, "isAfter", {
|
|
455
|
+
enumerable: true,
|
|
456
|
+
get: function () { return dateFns.isAfter; }
|
|
457
|
+
});
|
|
458
|
+
Object.defineProperty(exports, "isBefore", {
|
|
459
|
+
enumerable: true,
|
|
460
|
+
get: function () { return dateFns.isBefore; }
|
|
461
|
+
});
|
|
462
|
+
Object.defineProperty(exports, "isEqual", {
|
|
463
|
+
enumerable: true,
|
|
464
|
+
get: function () { return dateFns.isEqual; }
|
|
465
|
+
});
|
|
466
|
+
Object.defineProperty(exports, "isFuture", {
|
|
467
|
+
enumerable: true,
|
|
468
|
+
get: function () { return dateFns.isFuture; }
|
|
469
|
+
});
|
|
470
|
+
Object.defineProperty(exports, "isPast", {
|
|
471
|
+
enumerable: true,
|
|
472
|
+
get: function () { return dateFns.isPast; }
|
|
473
|
+
});
|
|
474
|
+
Object.defineProperty(exports, "isSameDay", {
|
|
475
|
+
enumerable: true,
|
|
476
|
+
get: function () { return dateFns.isSameDay; }
|
|
477
|
+
});
|
|
478
|
+
Object.defineProperty(exports, "isSameMonth", {
|
|
479
|
+
enumerable: true,
|
|
480
|
+
get: function () { return dateFns.isSameMonth; }
|
|
481
|
+
});
|
|
482
|
+
Object.defineProperty(exports, "isSameWeek", {
|
|
483
|
+
enumerable: true,
|
|
484
|
+
get: function () { return dateFns.isSameWeek; }
|
|
485
|
+
});
|
|
486
|
+
Object.defineProperty(exports, "isSameYear", {
|
|
487
|
+
enumerable: true,
|
|
488
|
+
get: function () { return dateFns.isSameYear; }
|
|
489
|
+
});
|
|
490
|
+
Object.defineProperty(exports, "isThisMonth", {
|
|
491
|
+
enumerable: true,
|
|
492
|
+
get: function () { return dateFns.isThisMonth; }
|
|
493
|
+
});
|
|
494
|
+
Object.defineProperty(exports, "isThisWeek", {
|
|
495
|
+
enumerable: true,
|
|
496
|
+
get: function () { return dateFns.isThisWeek; }
|
|
497
|
+
});
|
|
498
|
+
Object.defineProperty(exports, "isThisYear", {
|
|
499
|
+
enumerable: true,
|
|
500
|
+
get: function () { return dateFns.isThisYear; }
|
|
501
|
+
});
|
|
502
|
+
Object.defineProperty(exports, "isToday", {
|
|
503
|
+
enumerable: true,
|
|
504
|
+
get: function () { return dateFns.isToday; }
|
|
505
|
+
});
|
|
506
|
+
Object.defineProperty(exports, "isTomorrow", {
|
|
507
|
+
enumerable: true,
|
|
508
|
+
get: function () { return dateFns.isTomorrow; }
|
|
509
|
+
});
|
|
510
|
+
Object.defineProperty(exports, "isValid", {
|
|
511
|
+
enumerable: true,
|
|
512
|
+
get: function () { return dateFns.isValid; }
|
|
513
|
+
});
|
|
514
|
+
Object.defineProperty(exports, "isYesterday", {
|
|
515
|
+
enumerable: true,
|
|
516
|
+
get: function () { return dateFns.isYesterday; }
|
|
517
|
+
});
|
|
518
|
+
Object.defineProperty(exports, "parseISO", {
|
|
519
|
+
enumerable: true,
|
|
520
|
+
get: function () { return dateFns.parseISO; }
|
|
521
|
+
});
|
|
522
|
+
Object.defineProperty(exports, "setHours", {
|
|
523
|
+
enumerable: true,
|
|
524
|
+
get: function () { return dateFns.setHours; }
|
|
525
|
+
});
|
|
526
|
+
Object.defineProperty(exports, "setMinutes", {
|
|
527
|
+
enumerable: true,
|
|
528
|
+
get: function () { return dateFns.setMinutes; }
|
|
529
|
+
});
|
|
530
|
+
Object.defineProperty(exports, "setSeconds", {
|
|
531
|
+
enumerable: true,
|
|
532
|
+
get: function () { return dateFns.setSeconds; }
|
|
533
|
+
});
|
|
534
|
+
Object.defineProperty(exports, "startOfDay", {
|
|
535
|
+
enumerable: true,
|
|
536
|
+
get: function () { return dateFns.startOfDay; }
|
|
537
|
+
});
|
|
538
|
+
Object.defineProperty(exports, "startOfMonth", {
|
|
539
|
+
enumerable: true,
|
|
540
|
+
get: function () { return dateFns.startOfMonth; }
|
|
541
|
+
});
|
|
542
|
+
Object.defineProperty(exports, "startOfWeek", {
|
|
543
|
+
enumerable: true,
|
|
544
|
+
get: function () { return dateFns.startOfWeek; }
|
|
545
|
+
});
|
|
546
|
+
Object.defineProperty(exports, "startOfYear", {
|
|
547
|
+
enumerable: true,
|
|
548
|
+
get: function () { return dateFns.startOfYear; }
|
|
549
|
+
});
|
|
550
|
+
Object.defineProperty(exports, "subDays", {
|
|
551
|
+
enumerable: true,
|
|
552
|
+
get: function () { return dateFns.subDays; }
|
|
553
|
+
});
|
|
554
|
+
Object.defineProperty(exports, "subHours", {
|
|
555
|
+
enumerable: true,
|
|
556
|
+
get: function () { return dateFns.subHours; }
|
|
557
|
+
});
|
|
558
|
+
Object.defineProperty(exports, "subMinutes", {
|
|
559
|
+
enumerable: true,
|
|
560
|
+
get: function () { return dateFns.subMinutes; }
|
|
561
|
+
});
|
|
562
|
+
Object.defineProperty(exports, "subMonths", {
|
|
563
|
+
enumerable: true,
|
|
564
|
+
get: function () { return dateFns.subMonths; }
|
|
565
|
+
});
|
|
566
|
+
Object.defineProperty(exports, "subWeeks", {
|
|
567
|
+
enumerable: true,
|
|
568
|
+
get: function () { return dateFns.subWeeks; }
|
|
569
|
+
});
|
|
570
|
+
Object.defineProperty(exports, "subYears", {
|
|
571
|
+
enumerable: true,
|
|
572
|
+
get: function () { return dateFns.subYears; }
|
|
573
|
+
});
|
|
574
|
+
Object.defineProperty(exports, "formatInTimeZone", {
|
|
575
|
+
enumerable: true,
|
|
576
|
+
get: function () { return dateFnsTz.formatInTimeZone; }
|
|
577
|
+
});
|
|
578
|
+
Object.defineProperty(exports, "fromZonedTime", {
|
|
579
|
+
enumerable: true,
|
|
580
|
+
get: function () { return dateFnsTz.fromZonedTime; }
|
|
581
|
+
});
|
|
582
|
+
Object.defineProperty(exports, "toZonedTime", {
|
|
583
|
+
enumerable: true,
|
|
584
|
+
get: function () { return dateFnsTz.toZonedTime; }
|
|
585
|
+
});
|
|
586
|
+
exports.DATE_FORMATS = DATE_FORMATS;
|
|
587
|
+
exports.addTime = addTime;
|
|
588
|
+
exports.combineDateAndTime = combineDateAndTime;
|
|
589
|
+
exports.dateTime = date_time_default;
|
|
590
|
+
exports.daysSince = daysSince;
|
|
591
|
+
exports.daysUntil = daysUntil;
|
|
592
|
+
exports.doDateRangesOverlap = doDateRangesOverlap;
|
|
593
|
+
exports.formatDate = formatDate;
|
|
594
|
+
exports.formatDateInTimezone = formatDateInTimezone;
|
|
595
|
+
exports.formatDateRange = formatDateRange;
|
|
596
|
+
exports.formatDateTime = formatDateTime;
|
|
597
|
+
exports.formatRelativeTime = formatRelativeTime;
|
|
598
|
+
exports.formatSmartDate = formatSmartDate;
|
|
599
|
+
exports.fromTimezone = fromTimezone;
|
|
600
|
+
exports.getAge = getAge;
|
|
601
|
+
exports.getDateDifference = getDateDifference;
|
|
602
|
+
exports.getDayBoundaries = getDayBoundaries;
|
|
603
|
+
exports.getDaysInRange = getDaysInRange;
|
|
604
|
+
exports.getMonthBoundaries = getMonthBoundaries;
|
|
605
|
+
exports.getMonthsInRange = getMonthsInRange;
|
|
606
|
+
exports.getTimezoneDifference = getTimezoneDifference;
|
|
607
|
+
exports.getWeekBoundaries = getWeekBoundaries;
|
|
608
|
+
exports.getWeeksInRange = getWeeksInRange;
|
|
609
|
+
exports.getYearBoundaries = getYearBoundaries;
|
|
610
|
+
exports.isDateBetween = isDateBetween;
|
|
611
|
+
exports.isValidDate = isValidDate;
|
|
612
|
+
exports.isWeekday = isWeekday;
|
|
613
|
+
exports.isWeekend = isWeekend;
|
|
614
|
+
exports.nowInTimezone = nowInTimezone;
|
|
615
|
+
exports.parseDate = parseDate;
|
|
616
|
+
exports.setTime = setTime;
|
|
617
|
+
exports.subtractTime = subtractTime;
|
|
618
|
+
exports.toDateInputValue = toDateInputValue;
|
|
619
|
+
exports.toDateTimeInputValue = toDateTimeInputValue;
|
|
620
|
+
exports.toTimeInputValue = toTimeInputValue;
|
|
621
|
+
exports.toTimezone = toTimezone;
|
|
622
|
+
//# sourceMappingURL=index.js.map
|
|
623
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/shared/utils/date-time.ts"],"names":["parseISO","isValid","format","formatInTimeZone","formatDistance","formatDistanceToNow","isToday","isYesterday","isTomorrow","isThisWeek","isThisYear","intervalToDuration","formatDuration","toZonedTime","fromZonedTime","differenceInMinutes","addMinutes","addHours","addDays","addWeeks","addMonths","addYears","subMinutes","subHours","subDays","subWeeks","subMonths","subYears","differenceInSeconds","differenceInHours","differenceInDays","differenceInWeeks","differenceInMonths","differenceInYears","eachDayOfInterval","eachWeekOfInterval","eachMonthOfInterval","startOfDay","endOfDay","startOfWeek","endOfWeek","startOfMonth","endOfMonth","startOfYear","endOfYear","isAfter","isEqual","isBefore","getDay","setHours","setMinutes","setSeconds","getHours","getMinutes","getSeconds"],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * Enhanced Date/Time utilities using date-fns with timezone support\r\n * Deep level date handling for all common operations\r\n */\r\nimport {\r\n format,\r\n formatDistance,\r\n formatDistanceToNow,\r\n formatRelative,\r\n isToday,\r\n isYesterday,\r\n isTomorrow,\r\n isThisWeek,\r\n isThisMonth,\r\n isThisYear,\r\n isPast,\r\n isFuture,\r\n isValid,\r\n parseISO,\r\n addDays,\r\n addWeeks,\r\n addMonths,\r\n addYears,\r\n addHours,\r\n addMinutes,\r\n subDays,\r\n subWeeks,\r\n subMonths,\r\n subYears,\r\n subHours,\r\n subMinutes,\r\n startOfDay,\r\n endOfDay,\r\n startOfWeek,\r\n endOfWeek,\r\n startOfMonth,\r\n endOfMonth,\r\n startOfYear,\r\n endOfYear,\r\n differenceInDays,\r\n differenceInWeeks,\r\n differenceInMonths,\r\n differenceInYears,\r\n differenceInHours,\r\n differenceInMinutes,\r\n differenceInSeconds,\r\n isBefore,\r\n isAfter,\r\n isEqual,\r\n isSameDay,\r\n isSameWeek,\r\n isSameMonth,\r\n isSameYear,\r\n getDay,\r\n getDate,\r\n getMonth,\r\n getYear,\r\n getHours,\r\n getMinutes,\r\n getSeconds,\r\n setHours,\r\n setMinutes,\r\n setSeconds,\r\n eachDayOfInterval,\r\n eachWeekOfInterval,\r\n eachMonthOfInterval,\r\n intervalToDuration,\r\n formatDuration,\r\n} from 'date-fns';\r\n\r\nimport { formatInTimeZone, toZonedTime, fromZonedTime } from 'date-fns-tz';\r\n\r\n// Re-export all date-fns functions for convenience\r\nexport {\r\n format,\r\n formatDistance,\r\n formatDistanceToNow,\r\n formatRelative,\r\n isToday,\r\n isYesterday,\r\n isTomorrow,\r\n isThisWeek,\r\n isThisMonth,\r\n isThisYear,\r\n isPast,\r\n isFuture,\r\n isValid,\r\n parseISO,\r\n addDays,\r\n addWeeks,\r\n addMonths,\r\n addYears,\r\n addHours,\r\n addMinutes,\r\n subDays,\r\n subWeeks,\r\n subMonths,\r\n subYears,\r\n subHours,\r\n subMinutes,\r\n startOfDay,\r\n endOfDay,\r\n startOfWeek,\r\n endOfWeek,\r\n startOfMonth,\r\n endOfMonth,\r\n startOfYear,\r\n endOfYear,\r\n differenceInDays,\r\n differenceInWeeks,\r\n differenceInMonths,\r\n differenceInYears,\r\n differenceInHours,\r\n differenceInMinutes,\r\n differenceInSeconds,\r\n isBefore,\r\n isAfter,\r\n isEqual,\r\n isSameDay,\r\n isSameWeek,\r\n isSameMonth,\r\n isSameYear,\r\n getDay,\r\n getDate,\r\n getMonth,\r\n getYear,\r\n getHours,\r\n getMinutes,\r\n getSeconds,\r\n setHours,\r\n setMinutes,\r\n setSeconds,\r\n eachDayOfInterval,\r\n eachWeekOfInterval,\r\n eachMonthOfInterval,\r\n intervalToDuration,\r\n formatDuration,\r\n formatInTimeZone,\r\n toZonedTime,\r\n fromZonedTime,\r\n};\r\n\r\n/**\r\n * Date input type - accepts Date, string (ISO), or timestamp\r\n */\r\nexport type DateInput = Date | string | number;\r\n\r\n/**\r\n * Parse any date input to Date object\r\n */\r\nexport const parseDate = (date: DateInput): Date => {\r\n if (date instanceof Date) return date;\r\n if (typeof date === 'string') return parseISO(date);\r\n return new Date(date);\r\n};\r\n\r\n/**\r\n * Check if date input is valid\r\n */\r\nexport const isValidDate = (date: DateInput): boolean => {\r\n const parsed = parseDate(date);\r\n return isValid(parsed);\r\n};\r\n\r\n// ==========================================\r\n// FORMAT FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Format presets for common date formats\r\n */\r\nexport const DATE_FORMATS = {\r\n // Date only\r\n DATE_SHORT: 'MM/dd/yyyy', // 01/15/2026\r\n DATE_MEDIUM: 'MMM d, yyyy', // Jan 15, 2026\r\n DATE_LONG: 'MMMM d, yyyy', // January 15, 2026\r\n DATE_FULL: 'EEEE, MMMM d, yyyy', // Friday, January 15, 2026\r\n DATE_ISO: 'yyyy-MM-dd', // 2026-01-15\r\n\r\n // Time only\r\n TIME_SHORT: 'h:mm a', // 3:30 PM\r\n TIME_MEDIUM: 'h:mm:ss a', // 3:30:45 PM\r\n TIME_24H: 'HH:mm', // 15:30\r\n TIME_24H_FULL: 'HH:mm:ss', // 15:30:45\r\n\r\n // Date and time\r\n DATETIME_SHORT: 'MM/dd/yyyy h:mm a', // 01/15/2026 3:30 PM\r\n DATETIME_MEDIUM: 'MMM d, yyyy h:mm a', // Jan 15, 2026 3:30 PM\r\n DATETIME_LONG: 'MMMM d, yyyy h:mm a', // January 15, 2026 3:30 PM\r\n DATETIME_FULL: 'EEEE, MMMM d, yyyy h:mm a', // Friday, January 15, 2026 3:30 PM\r\n DATETIME_ISO: \"yyyy-MM-dd'T'HH:mm:ss\", // 2026-01-15T15:30:45\r\n\r\n // Special formats\r\n MONTH_YEAR: 'MMMM yyyy', // January 2026\r\n MONTH_DAY: 'MMM d', // Jan 15\r\n DAY_MONTH: 'd MMM', // 15 Jan\r\n WEEKDAY: 'EEEE', // Friday\r\n WEEKDAY_SHORT: 'EEE', // Fri\r\n} as const;\r\n\r\n/**\r\n * Format date with preset or custom format\r\n */\r\nexport const formatDate = (date: DateInput, formatStr: string = DATE_FORMATS.DATE_MEDIUM): string => {\r\n return format(parseDate(date), formatStr);\r\n};\r\n\r\n/**\r\n * Format date with time\r\n */\r\nexport const formatDateTime = (date: DateInput, formatStr: string = DATE_FORMATS.DATETIME_MEDIUM): string => {\r\n return format(parseDate(date), formatStr);\r\n};\r\n\r\n/**\r\n * Format date in a specific timezone\r\n */\r\nexport const formatDateInTimezone = (\r\n date: DateInput,\r\n timezone: string,\r\n formatStr: string = DATE_FORMATS.DATETIME_MEDIUM\r\n): string => {\r\n return formatInTimeZone(parseDate(date), timezone, formatStr);\r\n};\r\n\r\n/**\r\n * Format date as relative time (e.g., \"2 hours ago\", \"in 3 days\")\r\n */\r\nexport const formatRelativeTime = (date: DateInput, baseDate?: DateInput): string => {\r\n const parsed = parseDate(date);\r\n if (baseDate) {\r\n return formatDistance(parsed, parseDate(baseDate), { addSuffix: true });\r\n }\r\n return formatDistanceToNow(parsed, { addSuffix: true });\r\n};\r\n\r\n/**\r\n * Format date as smart relative (Today at 3:30 PM, Yesterday, etc.)\r\n */\r\nexport const formatSmartDate = (date: DateInput): string => {\r\n const parsed = parseDate(date);\r\n\r\n if (isToday(parsed)) {\r\n return `Today at ${format(parsed, DATE_FORMATS.TIME_SHORT)}`;\r\n }\r\n if (isYesterday(parsed)) {\r\n return `Yesterday at ${format(parsed, DATE_FORMATS.TIME_SHORT)}`;\r\n }\r\n if (isTomorrow(parsed)) {\r\n return `Tomorrow at ${format(parsed, DATE_FORMATS.TIME_SHORT)}`;\r\n }\r\n if (isThisWeek(parsed)) {\r\n return format(parsed, 'EEEE \\'at\\' h:mm a'); // Friday at 3:30 PM\r\n }\r\n if (isThisYear(parsed)) {\r\n return format(parsed, 'MMM d \\'at\\' h:mm a'); // Jan 15 at 3:30 PM\r\n }\r\n return format(parsed, DATE_FORMATS.DATETIME_MEDIUM);\r\n};\r\n\r\n/**\r\n * Format duration between two dates in human readable form\r\n */\r\nexport const formatDateRange = (start: DateInput, end: DateInput): string => {\r\n const duration = intervalToDuration({\r\n start: parseDate(start),\r\n end: parseDate(end),\r\n });\r\n\r\n return formatDuration(duration, {\r\n format: ['years', 'months', 'days', 'hours', 'minutes'],\r\n });\r\n};\r\n\r\n// ==========================================\r\n// TIMEZONE FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Convert date to a specific timezone\r\n */\r\nexport const toTimezone = (date: DateInput, timezone: string): Date => {\r\n return toZonedTime(parseDate(date), timezone);\r\n};\r\n\r\n/**\r\n * Convert date from a specific timezone to UTC\r\n */\r\nexport const fromTimezone = (date: DateInput, timezone: string): Date => {\r\n return fromZonedTime(parseDate(date), timezone);\r\n};\r\n\r\n/**\r\n * Get current time in a specific timezone\r\n */\r\nexport const nowInTimezone = (timezone: string): Date => {\r\n return toZonedTime(new Date(), timezone);\r\n};\r\n\r\n/**\r\n * Format time difference between timezones\r\n */\r\nexport const getTimezoneDifference = (timezone1: string, timezone2: string): string => {\r\n const now = new Date();\r\n const time1 = toZonedTime(now, timezone1);\r\n const time2 = toZonedTime(now, timezone2);\r\n const diffMinutes = differenceInMinutes(time1, time2);\r\n const hours = Math.floor(Math.abs(diffMinutes) / 60);\r\n const minutes = Math.abs(diffMinutes) % 60;\r\n const sign = diffMinutes >= 0 ? '+' : '-';\r\n\r\n if (minutes === 0) {\r\n return `${sign}${hours}h`;\r\n }\r\n return `${sign}${hours}h ${minutes}m`;\r\n};\r\n\r\n// ==========================================\r\n// DATE ARITHMETIC\r\n// ==========================================\r\n\r\n/**\r\n * Add time to a date\r\n */\r\nexport const addTime = (\r\n date: DateInput,\r\n amount: number,\r\n unit: 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years'\r\n): Date => {\r\n const parsed = parseDate(date);\r\n switch (unit) {\r\n case 'minutes':\r\n return addMinutes(parsed, amount);\r\n case 'hours':\r\n return addHours(parsed, amount);\r\n case 'days':\r\n return addDays(parsed, amount);\r\n case 'weeks':\r\n return addWeeks(parsed, amount);\r\n case 'months':\r\n return addMonths(parsed, amount);\r\n case 'years':\r\n return addYears(parsed, amount);\r\n }\r\n};\r\n\r\n/**\r\n * Subtract time from a date\r\n */\r\nexport const subtractTime = (\r\n date: DateInput,\r\n amount: number,\r\n unit: 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years'\r\n): Date => {\r\n const parsed = parseDate(date);\r\n switch (unit) {\r\n case 'minutes':\r\n return subMinutes(parsed, amount);\r\n case 'hours':\r\n return subHours(parsed, amount);\r\n case 'days':\r\n return subDays(parsed, amount);\r\n case 'weeks':\r\n return subWeeks(parsed, amount);\r\n case 'months':\r\n return subMonths(parsed, amount);\r\n case 'years':\r\n return subYears(parsed, amount);\r\n }\r\n};\r\n\r\n/**\r\n * Get difference between two dates\r\n */\r\nexport const getDateDifference = (\r\n date1: DateInput,\r\n date2: DateInput,\r\n unit: 'seconds' | 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years'\r\n): number => {\r\n const d1 = parseDate(date1);\r\n const d2 = parseDate(date2);\r\n switch (unit) {\r\n case 'seconds':\r\n return differenceInSeconds(d1, d2);\r\n case 'minutes':\r\n return differenceInMinutes(d1, d2);\r\n case 'hours':\r\n return differenceInHours(d1, d2);\r\n case 'days':\r\n return differenceInDays(d1, d2);\r\n case 'weeks':\r\n return differenceInWeeks(d1, d2);\r\n case 'months':\r\n return differenceInMonths(d1, d2);\r\n case 'years':\r\n return differenceInYears(d1, d2);\r\n }\r\n};\r\n\r\n// ==========================================\r\n// DATE RANGE FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Get all days in a range\r\n */\r\nexport const getDaysInRange = (start: DateInput, end: DateInput): Date[] => {\r\n return eachDayOfInterval({\r\n start: parseDate(start),\r\n end: parseDate(end),\r\n });\r\n};\r\n\r\n/**\r\n * Get all weeks in a range\r\n */\r\nexport const getWeeksInRange = (start: DateInput, end: DateInput): Date[] => {\r\n return eachWeekOfInterval({\r\n start: parseDate(start),\r\n end: parseDate(end),\r\n });\r\n};\r\n\r\n/**\r\n * Get all months in a range\r\n */\r\nexport const getMonthsInRange = (start: DateInput, end: DateInput): Date[] => {\r\n return eachMonthOfInterval({\r\n start: parseDate(start),\r\n end: parseDate(end),\r\n });\r\n};\r\n\r\n// ==========================================\r\n// DATE BOUNDARIES\r\n// ==========================================\r\n\r\n/**\r\n * Get start and end of day\r\n */\r\nexport const getDayBoundaries = (date: DateInput): { start: Date; end: Date } => {\r\n const parsed = parseDate(date);\r\n return {\r\n start: startOfDay(parsed),\r\n end: endOfDay(parsed),\r\n };\r\n};\r\n\r\n/**\r\n * Get start and end of week\r\n */\r\nexport const getWeekBoundaries = (date: DateInput, weekStartsOn: 0 | 1 = 0): { start: Date; end: Date } => {\r\n const parsed = parseDate(date);\r\n return {\r\n start: startOfWeek(parsed, { weekStartsOn }),\r\n end: endOfWeek(parsed, { weekStartsOn }),\r\n };\r\n};\r\n\r\n/**\r\n * Get start and end of month\r\n */\r\nexport const getMonthBoundaries = (date: DateInput): { start: Date; end: Date } => {\r\n const parsed = parseDate(date);\r\n return {\r\n start: startOfMonth(parsed),\r\n end: endOfMonth(parsed),\r\n };\r\n};\r\n\r\n/**\r\n * Get start and end of year\r\n */\r\nexport const getYearBoundaries = (date: DateInput): { start: Date; end: Date } => {\r\n const parsed = parseDate(date);\r\n return {\r\n start: startOfYear(parsed),\r\n end: endOfYear(parsed),\r\n };\r\n};\r\n\r\n// ==========================================\r\n// DATE COMPARISON\r\n// ==========================================\r\n\r\n/**\r\n * Check if date is between two dates (inclusive)\r\n */\r\nexport const isDateBetween = (date: DateInput, start: DateInput, end: DateInput): boolean => {\r\n const d = parseDate(date);\r\n const s = parseDate(start);\r\n const e = parseDate(end);\r\n return (isAfter(d, s) || isEqual(d, s)) && (isBefore(d, e) || isEqual(d, e));\r\n};\r\n\r\n/**\r\n * Check if two date ranges overlap\r\n */\r\nexport const doDateRangesOverlap = (\r\n range1Start: DateInput,\r\n range1End: DateInput,\r\n range2Start: DateInput,\r\n range2End: DateInput\r\n): boolean => {\r\n const r1s = parseDate(range1Start);\r\n const r1e = parseDate(range1End);\r\n const r2s = parseDate(range2Start);\r\n const r2e = parseDate(range2End);\r\n\r\n return isBefore(r1s, r2e) && isAfter(r1e, r2s);\r\n};\r\n\r\n// ==========================================\r\n// UTILITY FUNCTIONS\r\n// ==========================================\r\n\r\n/**\r\n * Get age from birthdate\r\n */\r\nexport const getAge = (birthDate: DateInput): number => {\r\n return differenceInYears(new Date(), parseDate(birthDate));\r\n};\r\n\r\n/**\r\n * Check if date is a weekend\r\n */\r\nexport const isWeekend = (date: DateInput): boolean => {\r\n const day = getDay(parseDate(date));\r\n return day === 0 || day === 6;\r\n};\r\n\r\n/**\r\n * Check if date is a weekday\r\n */\r\nexport const isWeekday = (date: DateInput): boolean => {\r\n return !isWeekend(date);\r\n};\r\n\r\n/**\r\n * Get days until a date\r\n */\r\nexport const daysUntil = (date: DateInput): number => {\r\n return differenceInDays(parseDate(date), new Date());\r\n};\r\n\r\n/**\r\n * Get days since a date\r\n */\r\nexport const daysSince = (date: DateInput): number => {\r\n return differenceInDays(new Date(), parseDate(date));\r\n};\r\n\r\n/**\r\n * Format for HTML date input (yyyy-MM-dd)\r\n */\r\nexport const toDateInputValue = (date: DateInput): string => {\r\n return format(parseDate(date), DATE_FORMATS.DATE_ISO);\r\n};\r\n\r\n/**\r\n * Format for HTML datetime-local input\r\n */\r\nexport const toDateTimeInputValue = (date: DateInput): string => {\r\n return format(parseDate(date), \"yyyy-MM-dd'T'HH:mm\");\r\n};\r\n\r\n/**\r\n * Format for HTML time input (HH:mm)\r\n */\r\nexport const toTimeInputValue = (date: DateInput): string => {\r\n return format(parseDate(date), DATE_FORMATS.TIME_24H);\r\n};\r\n\r\n/**\r\n * Set time on a date\r\n */\r\nexport const setTime = (date: DateInput, hours: number, minutes: number, seconds: number = 0): Date => {\r\n let result = parseDate(date);\r\n result = setHours(result, hours);\r\n result = setMinutes(result, minutes);\r\n result = setSeconds(result, seconds);\r\n return result;\r\n};\r\n\r\n/**\r\n * Combine date from one input and time from another\r\n */\r\nexport const combineDateAndTime = (dateInput: DateInput, timeInput: DateInput): Date => {\r\n const date = parseDate(dateInput);\r\n const time = parseDate(timeInput);\r\n return setTime(date, getHours(time), getMinutes(time), getSeconds(time));\r\n};\r\n\r\nexport default {\r\n // Core\r\n parseDate,\r\n isValidDate,\r\n DATE_FORMATS,\r\n\r\n // Format\r\n formatDate,\r\n formatDateTime,\r\n formatDateInTimezone,\r\n formatRelativeTime,\r\n formatSmartDate,\r\n formatDateRange,\r\n\r\n // Timezone\r\n toTimezone,\r\n fromTimezone,\r\n nowInTimezone,\r\n getTimezoneDifference,\r\n\r\n // Arithmetic\r\n addTime,\r\n subtractTime,\r\n getDateDifference,\r\n\r\n // Ranges\r\n getDaysInRange,\r\n getWeeksInRange,\r\n getMonthsInRange,\r\n\r\n // Boundaries\r\n getDayBoundaries,\r\n getWeekBoundaries,\r\n getMonthBoundaries,\r\n getYearBoundaries,\r\n\r\n // Comparison\r\n isDateBetween,\r\n doDateRangesOverlap,\r\n\r\n // Utilities\r\n getAge,\r\n isWeekend,\r\n isWeekday,\r\n daysUntil,\r\n daysSince,\r\n toDateInputValue,\r\n toDateTimeInputValue,\r\n toTimeInputValue,\r\n setTime,\r\n combineDateAndTime,\r\n};\r\n"]}
|