@formkit/tempo 0.1.2 → 1.1.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 +22 -1
- package/dist/add.d.ts +11 -0
- package/dist/add.mjs +50 -0
- package/dist/add.mjs.map +1 -0
- package/dist/addDay.d.ts +4 -3
- package/dist/addDay.mjs.map +1 -1
- package/dist/addHour.d.ts +4 -3
- package/dist/addHour.mjs.map +1 -1
- package/dist/addMillisecond.d.ts +10 -0
- package/dist/addMillisecond.mjs +11 -0
- package/dist/addMillisecond.mjs.map +1 -0
- package/dist/addMinute.d.ts +5 -4
- package/dist/addMinute.mjs.map +1 -1
- package/dist/addMonth.d.ts +5 -5
- package/dist/addMonth.mjs +2 -12
- package/dist/addMonth.mjs.map +1 -1
- package/dist/addSecond.d.ts +4 -3
- package/dist/addSecond.mjs.map +1 -1
- package/dist/addYear.d.ts +5 -5
- package/dist/addYear.mjs +6 -12
- package/dist/addYear.mjs.map +1 -1
- package/dist/ap.mjs +1 -2
- package/dist/ap.mjs.map +1 -1
- package/dist/applyOffset.d.ts +5 -5
- package/dist/applyOffset.mjs +5 -11
- package/dist/applyOffset.mjs.map +1 -1
- package/dist/bundle.d.ts +365 -115
- package/dist/bundle.mjs +364 -180
- package/dist/bundle.mjs.map +1 -1
- package/dist/common.d.ts +27 -7
- package/dist/common.mjs +47 -42
- package/dist/common.mjs.map +1 -1
- package/dist/date.d.ts +2 -2
- package/dist/date.mjs +1 -3
- package/dist/date.mjs.map +1 -1
- package/dist/dayEnd.d.ts +3 -3
- package/dist/dayEnd.mjs.map +1 -1
- package/dist/dayOfYear.d.ts +3 -3
- package/dist/dayOfYear.mjs.map +1 -1
- package/dist/dayStart.d.ts +3 -3
- package/dist/dayStart.mjs +1 -1
- package/dist/dayStart.mjs.map +1 -1
- package/dist/diff.d.ts +38 -0
- package/dist/diff.mjs +86 -0
- package/dist/diff.mjs.map +1 -0
- package/dist/diffDays.d.ts +12 -5
- package/dist/diffDays.mjs +1 -0
- package/dist/diffDays.mjs.map +1 -1
- package/dist/diffHours.d.ts +12 -5
- package/dist/diffHours.mjs +1 -0
- package/dist/diffHours.mjs.map +1 -1
- package/dist/diffMilliseconds.d.ts +10 -4
- package/dist/diffMilliseconds.mjs.map +1 -1
- package/dist/diffMinutes.d.ts +11 -3
- package/dist/diffMinutes.mjs +5 -1
- package/dist/diffMinutes.mjs.map +1 -1
- package/dist/diffMonths.d.ts +10 -4
- package/dist/diffMonths.mjs.map +1 -1
- package/dist/diffSeconds.d.ts +12 -5
- package/dist/diffSeconds.mjs +5 -1
- package/dist/diffSeconds.mjs.map +1 -1
- package/dist/diffWeeks.d.ts +10 -3
- package/dist/diffWeeks.mjs.map +1 -1
- package/dist/diffYears.d.ts +10 -4
- package/dist/diffYears.mjs +4 -1
- package/dist/diffYears.mjs.map +1 -1
- package/dist/format.mjs +2 -3
- package/dist/format.mjs.map +1 -1
- package/dist/handleDateOverflow.d.ts +12 -0
- package/dist/handleDateOverflow.mjs +18 -0
- package/dist/handleDateOverflow.mjs.map +1 -0
- package/dist/hourEnd.d.ts +3 -3
- package/dist/hourEnd.mjs.map +1 -1
- package/dist/hourStart.d.ts +3 -3
- package/dist/hourStart.mjs +1 -1
- package/dist/hourStart.mjs.map +1 -1
- package/dist/index.cjs +380 -183
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +365 -115
- package/dist/index.d.ts +14 -1
- package/dist/index.mjs +26 -0
- package/dist/index.mjs.map +1 -1
- package/dist/isAfter.d.ts +6 -6
- package/dist/isAfter.mjs.map +1 -1
- package/dist/isBefore.d.ts +5 -5
- package/dist/isBefore.mjs.map +1 -1
- package/dist/isEqual.d.ts +13 -4
- package/dist/isEqual.mjs.map +1 -1
- package/dist/isFuture.d.ts +10 -0
- package/dist/isFuture.mjs +9 -0
- package/dist/isFuture.mjs.map +1 -0
- package/dist/isPast.d.ts +10 -0
- package/dist/isPast.mjs +9 -0
- package/dist/isPast.mjs.map +1 -0
- package/dist/iso8601.d.ts +1 -1
- package/dist/iso8601.mjs +4 -7
- package/dist/iso8601.mjs.map +1 -1
- package/dist/minuteEnd.d.ts +3 -3
- package/dist/minuteEnd.mjs.map +1 -1
- package/dist/minuteStart.d.ts +3 -3
- package/dist/minuteStart.mjs +1 -1
- package/dist/minuteStart.mjs.map +1 -1
- package/dist/monthDays.d.ts +3 -3
- package/dist/monthDays.mjs.map +1 -1
- package/dist/monthEnd.d.ts +3 -3
- package/dist/monthEnd.mjs.map +1 -1
- package/dist/monthStart.d.ts +3 -3
- package/dist/monthStart.mjs +1 -1
- package/dist/monthStart.mjs.map +1 -1
- package/dist/nearestDay.d.ts +3 -3
- package/dist/nearestDay.mjs +2 -4
- package/dist/nearestDay.mjs.map +1 -1
- package/dist/offset.d.ts +5 -5
- package/dist/offset.mjs +16 -16
- package/dist/offset.mjs.map +1 -1
- package/dist/parse.mjs +33 -23
- package/dist/parse.mjs.map +1 -1
- package/dist/parts.mjs +14 -24
- package/dist/parts.mjs.map +1 -1
- package/dist/range.mjs +1 -2
- package/dist/range.mjs.map +1 -1
- package/dist/removeOffset.d.ts +4 -4
- package/dist/removeOffset.mjs.map +1 -1
- package/dist/sameDay.d.ts +8 -2
- package/dist/sameDay.mjs.map +1 -1
- package/dist/sameHour.d.ts +8 -2
- package/dist/sameHour.mjs.map +1 -1
- package/dist/sameMillisecond.d.ts +16 -0
- package/dist/sameMillisecond.mjs +11 -0
- package/dist/sameMillisecond.mjs.map +1 -0
- package/dist/sameMinute.d.ts +8 -2
- package/dist/sameMinute.mjs.map +1 -1
- package/dist/sameMonth.d.ts +16 -0
- package/dist/sameMonth.mjs +11 -0
- package/dist/sameMonth.mjs.map +1 -0
- package/dist/sameSecond.d.ts +8 -2
- package/dist/sameSecond.mjs.map +1 -1
- package/dist/sameYear.d.ts +8 -2
- package/dist/sameYear.mjs.map +1 -1
- package/dist/setDayOfMonth.d.ts +11 -0
- package/dist/setDayOfMonth.mjs +16 -0
- package/dist/setDayOfMonth.mjs.map +1 -0
- package/dist/setHour.d.ts +10 -0
- package/dist/setHour.mjs +11 -0
- package/dist/setHour.mjs.map +1 -0
- package/dist/setMilliseconds.d.ts +10 -0
- package/dist/setMilliseconds.mjs +11 -0
- package/dist/setMilliseconds.mjs.map +1 -0
- package/dist/setMinutes.d.ts +10 -0
- package/dist/setMinutes.mjs +11 -0
- package/dist/setMinutes.mjs.map +1 -0
- package/dist/setMonth.d.ts +11 -0
- package/dist/setMonth.mjs +9 -0
- package/dist/setMonth.mjs.map +1 -0
- package/dist/setSeconds.d.ts +10 -0
- package/dist/setSeconds.mjs +11 -0
- package/dist/setSeconds.mjs.map +1 -0
- package/dist/setYear.d.ts +11 -0
- package/dist/setYear.mjs +9 -0
- package/dist/setYear.mjs.map +1 -0
- package/dist/types.d.ts +29 -7
- package/dist/tzDate.d.ts +5 -3
- package/dist/tzDate.mjs.map +1 -1
- package/dist/weekEnd.d.ts +4 -4
- package/dist/weekEnd.mjs +1 -1
- package/dist/weekEnd.mjs.map +1 -1
- package/dist/weekStart.d.ts +4 -4
- package/dist/weekStart.mjs +2 -3
- package/dist/weekStart.mjs.map +1 -1
- package/dist/yearDays.d.ts +3 -3
- package/dist/yearDays.mjs.map +1 -1
- package/dist/yearEnd.d.ts +3 -3
- package/dist/yearEnd.mjs +1 -2
- package/dist/yearEnd.mjs.map +1 -1
- package/dist/yearStart.d.ts +3 -3
- package/dist/yearStart.mjs +2 -3
- package/dist/yearStart.mjs.map +1 -1
- package/package.json +32 -23
package/dist/index.cjs
CHANGED
|
@@ -18,10 +18,12 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
|
|
20
20
|
// src/index.ts
|
|
21
|
-
var
|
|
22
|
-
__export(
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
add: () => add,
|
|
23
24
|
addDay: () => addDay,
|
|
24
25
|
addHour: () => addHour,
|
|
26
|
+
addMillisecond: () => addMillisecond,
|
|
25
27
|
addMinute: () => addMinute,
|
|
26
28
|
addMonth: () => addMonth,
|
|
27
29
|
addSecond: () => addSecond,
|
|
@@ -32,6 +34,7 @@ __export(src_exports, {
|
|
|
32
34
|
dayEnd: () => dayEnd,
|
|
33
35
|
dayOfYear: () => dayOfYear,
|
|
34
36
|
dayStart: () => dayStart,
|
|
37
|
+
diff: () => diff,
|
|
35
38
|
diffDays: () => diffDays,
|
|
36
39
|
diffHours: () => diffHours,
|
|
37
40
|
diffMilliseconds: () => diffMilliseconds,
|
|
@@ -48,6 +51,8 @@ __export(src_exports, {
|
|
|
48
51
|
isAfter: () => isAfter,
|
|
49
52
|
isBefore: () => isBefore,
|
|
50
53
|
isEqual: () => isEqual,
|
|
54
|
+
isFuture: () => isFuture,
|
|
55
|
+
isPast: () => isPast,
|
|
51
56
|
iso8601: () => iso8601,
|
|
52
57
|
minuteEnd: () => minuteEnd,
|
|
53
58
|
minuteStart: () => minuteStart,
|
|
@@ -63,9 +68,17 @@ __export(src_exports, {
|
|
|
63
68
|
removeOffset: () => removeOffset,
|
|
64
69
|
sameDay: () => sameDay,
|
|
65
70
|
sameHour: () => sameHour,
|
|
71
|
+
sameMillisecond: () => sameMillisecond,
|
|
66
72
|
sameMinute: () => sameMinute,
|
|
67
73
|
sameSecond: () => sameSecond,
|
|
68
74
|
sameYear: () => sameYear,
|
|
75
|
+
setDayOfMonth: () => setDayOfMonth,
|
|
76
|
+
setHour: () => setHour,
|
|
77
|
+
setMilliseconds: () => setMilliseconds,
|
|
78
|
+
setMinutes: () => setMinutes,
|
|
79
|
+
setMonth: () => setMonth,
|
|
80
|
+
setSeconds: () => setSeconds,
|
|
81
|
+
setYear: () => setYear,
|
|
69
82
|
tzDate: () => tzDate,
|
|
70
83
|
weekEnd: () => weekEnd,
|
|
71
84
|
weekStart: () => weekStart,
|
|
@@ -73,25 +86,22 @@ __export(src_exports, {
|
|
|
73
86
|
yearEnd: () => yearEnd,
|
|
74
87
|
yearStart: () => yearStart
|
|
75
88
|
});
|
|
76
|
-
module.exports = __toCommonJS(
|
|
89
|
+
module.exports = __toCommonJS(index_exports);
|
|
77
90
|
|
|
78
91
|
// src/iso8601.ts
|
|
79
|
-
var iso8601Match = /^([0-9]{4})-([0-1][0-9])(?:-([0-3][0-9]))?(?:[T ]?([0-2][0-9])(?::([0-5][0-9]))?(?::([0-5][0-9]))?)?(?:\.[0-9]+)?(Z|(?:\+|\-)[0-9]{2}:?[0-9]{2})?$/;
|
|
92
|
+
var iso8601Match = /^([0-9]{4})-([0-1][0-9])(?:-([0-3][0-9]))?(?:[T ]?([0-2][0-9])(?::([0-5][0-9]))?(?::([0-5][0-9]))?)?(?:\.[0-9]+)?(Z|(?:\+|\-)[0-9]{2}:?[0-9]{2}(?::?[0-9]{2})?)?$/;
|
|
80
93
|
function iso8601(date2) {
|
|
81
94
|
const matches = date2.match(iso8601Match);
|
|
82
95
|
if (matches) {
|
|
83
96
|
const month = Number(matches[2]);
|
|
84
|
-
if (month < 1 || month > 12)
|
|
85
|
-
return false;
|
|
97
|
+
if (month < 1 || month > 12) return false;
|
|
86
98
|
if (typeof matches[3] !== void 0) {
|
|
87
99
|
const date3 = Number(matches[3]);
|
|
88
|
-
if (date3 < 1 || date3 > 31)
|
|
89
|
-
return false;
|
|
100
|
+
if (date3 < 1 || date3 > 31) return false;
|
|
90
101
|
}
|
|
91
102
|
if (typeof matches[4] !== void 0) {
|
|
92
103
|
const hours = Number(matches[4]);
|
|
93
|
-
if (hours < 0 || hours > 23)
|
|
94
|
-
return false;
|
|
104
|
+
if (hours < 0 || hours > 23) return false;
|
|
95
105
|
}
|
|
96
106
|
return true;
|
|
97
107
|
}
|
|
@@ -111,9 +121,7 @@ function date(date2) {
|
|
|
111
121
|
date2 = /* @__PURE__ */ new Date();
|
|
112
122
|
}
|
|
113
123
|
if (date2 instanceof Date) {
|
|
114
|
-
|
|
115
|
-
d.setMilliseconds(0);
|
|
116
|
-
return d;
|
|
124
|
+
return new Date(date2);
|
|
117
125
|
}
|
|
118
126
|
date2 = date2.trim();
|
|
119
127
|
if (iso8601(date2)) {
|
|
@@ -129,6 +137,27 @@ function addDay(inputDate, count = 1) {
|
|
|
129
137
|
return d;
|
|
130
138
|
}
|
|
131
139
|
|
|
140
|
+
// src/addHour.ts
|
|
141
|
+
function addHour(inputDate, count = 1) {
|
|
142
|
+
const d = date(inputDate);
|
|
143
|
+
d.setHours(d.getHours() + count);
|
|
144
|
+
return d;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// src/addMillisecond.ts
|
|
148
|
+
function addMillisecond(inputDate, count = 1) {
|
|
149
|
+
const d = date(inputDate);
|
|
150
|
+
d.setMilliseconds(d.getMilliseconds() + count);
|
|
151
|
+
return d;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// src/addMinute.ts
|
|
155
|
+
function addMinute(inputDate, count = 1) {
|
|
156
|
+
const d = date(inputDate);
|
|
157
|
+
d.setMinutes(d.getMinutes() + count);
|
|
158
|
+
return d;
|
|
159
|
+
}
|
|
160
|
+
|
|
132
161
|
// src/monthEnd.ts
|
|
133
162
|
function monthEnd(inputDate) {
|
|
134
163
|
const d = date(inputDate);
|
|
@@ -144,13 +173,12 @@ function monthDays(inputDate) {
|
|
|
144
173
|
return d.getDate();
|
|
145
174
|
}
|
|
146
175
|
|
|
147
|
-
// src/
|
|
148
|
-
function
|
|
176
|
+
// src/handleDateOverflow.ts
|
|
177
|
+
function handleOverflow(inputDate, action, dateOverflow = false) {
|
|
149
178
|
const d = date(inputDate);
|
|
150
179
|
const dayOfMonth = d.getDate();
|
|
151
|
-
if (!dateOverflow)
|
|
152
|
-
|
|
153
|
-
d.setMonth(d.getMonth() + count);
|
|
180
|
+
if (!dateOverflow) d.setDate(1);
|
|
181
|
+
action(d);
|
|
154
182
|
if (!dateOverflow) {
|
|
155
183
|
const daysInMonth = monthDays(d);
|
|
156
184
|
d.setDate(daysInMonth < dayOfMonth ? daysInMonth : dayOfMonth);
|
|
@@ -158,38 +186,63 @@ function addMonth(inputDate, count = 1, dateOverflow = false) {
|
|
|
158
186
|
return d;
|
|
159
187
|
}
|
|
160
188
|
|
|
161
|
-
// src/
|
|
162
|
-
function
|
|
163
|
-
|
|
164
|
-
const dayOfMonth = d.getDate();
|
|
165
|
-
if (!dateOverflow)
|
|
166
|
-
d.setDate(1);
|
|
167
|
-
d.setFullYear(d.getFullYear() + count);
|
|
168
|
-
if (!dateOverflow) {
|
|
169
|
-
const daysInMonth = monthDays(d);
|
|
170
|
-
d.setDate(daysInMonth < dayOfMonth ? daysInMonth : dayOfMonth);
|
|
171
|
-
}
|
|
172
|
-
return d;
|
|
189
|
+
// src/addMonth.ts
|
|
190
|
+
function addMonth(inputDate, count = 1, dateOverflow = false) {
|
|
191
|
+
return handleOverflow(inputDate, (d) => d.setMonth(d.getMonth() + count), dateOverflow);
|
|
173
192
|
}
|
|
174
193
|
|
|
175
|
-
// src/
|
|
176
|
-
function
|
|
194
|
+
// src/addSecond.ts
|
|
195
|
+
function addSecond(inputDate, count = 1) {
|
|
177
196
|
const d = date(inputDate);
|
|
178
|
-
d.
|
|
197
|
+
d.setSeconds(d.getSeconds() + count);
|
|
179
198
|
return d;
|
|
180
199
|
}
|
|
181
200
|
|
|
182
|
-
// src/
|
|
183
|
-
function
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
201
|
+
// src/addYear.ts
|
|
202
|
+
function addYear(inputDate, count = 1, dateOverflow = false) {
|
|
203
|
+
return handleOverflow(
|
|
204
|
+
inputDate,
|
|
205
|
+
(d) => d.setFullYear(d.getFullYear() + count),
|
|
206
|
+
dateOverflow
|
|
207
|
+
);
|
|
187
208
|
}
|
|
188
209
|
|
|
189
|
-
// src/
|
|
190
|
-
function
|
|
191
|
-
|
|
192
|
-
d
|
|
210
|
+
// src/add.ts
|
|
211
|
+
function add(inputDate, duration, dateOverflow = false) {
|
|
212
|
+
var _a, _b;
|
|
213
|
+
let d = date(inputDate);
|
|
214
|
+
const applyFixedUnits = () => {
|
|
215
|
+
if (duration.weeks) {
|
|
216
|
+
d = addDay(d, duration.weeks * 7);
|
|
217
|
+
}
|
|
218
|
+
if (duration.days) {
|
|
219
|
+
d = addDay(d, duration.days);
|
|
220
|
+
}
|
|
221
|
+
if (duration.hours) {
|
|
222
|
+
d = addHour(d, duration.hours);
|
|
223
|
+
}
|
|
224
|
+
if (duration.minutes) {
|
|
225
|
+
d = addMinute(d, duration.minutes);
|
|
226
|
+
}
|
|
227
|
+
if (duration.seconds) {
|
|
228
|
+
d = addSecond(d, duration.seconds);
|
|
229
|
+
}
|
|
230
|
+
if (duration.milliseconds) {
|
|
231
|
+
d = addMillisecond(d, duration.milliseconds);
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
const applyCalendarUnits = () => {
|
|
235
|
+
if (duration.months) {
|
|
236
|
+
d = addMonth(d, duration.months, dateOverflow);
|
|
237
|
+
}
|
|
238
|
+
if (duration.years) {
|
|
239
|
+
d = addYear(d, duration.years, dateOverflow);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
const calendarFirst = ((_a = duration.months) != null ? _a : 0) < 0 || ((_b = duration.years) != null ? _b : 0) < 0;
|
|
243
|
+
if (calendarFirst) applyCalendarUnits();
|
|
244
|
+
applyFixedUnits();
|
|
245
|
+
if (!calendarFirst) applyCalendarUnits();
|
|
193
246
|
return d;
|
|
194
247
|
}
|
|
195
248
|
|
|
@@ -225,6 +278,9 @@ var clock12 = [
|
|
|
225
278
|
["a", { dayPeriod: "narrow" }],
|
|
226
279
|
["A", { dayPeriod: "narrow" }]
|
|
227
280
|
];
|
|
281
|
+
var fractionalSeconds = [
|
|
282
|
+
["SSS", { fractionalSecond: "3-digit" }]
|
|
283
|
+
];
|
|
228
284
|
var fixedLength = {
|
|
229
285
|
DD: 2,
|
|
230
286
|
HH: 2,
|
|
@@ -236,6 +292,12 @@ var fixedLength = {
|
|
|
236
292
|
ss: 2
|
|
237
293
|
};
|
|
238
294
|
function fixedLengthByOffset(offsetString) {
|
|
295
|
+
if (/^[+-]\d{2}:\d{2}:\d{2}/.test(offsetString)) {
|
|
296
|
+
return 9;
|
|
297
|
+
}
|
|
298
|
+
if (/^[+-]\d{6}/.test(offsetString)) {
|
|
299
|
+
return 8;
|
|
300
|
+
}
|
|
239
301
|
if (/^[+-]\d{2}:\d{2}/.test(offsetString)) {
|
|
240
302
|
return 6;
|
|
241
303
|
}
|
|
@@ -246,17 +308,12 @@ function fixedLengthByOffset(offsetString) {
|
|
|
246
308
|
}
|
|
247
309
|
var genitiveTokens = ["MMMM", "MMM", "dddd", "ddd"];
|
|
248
310
|
var tokens = /* @__PURE__ */ new Map(
|
|
249
|
-
/* @__PURE__ */ [...clockAgnostic, ...clock24, ...clock12].map((format2) => {
|
|
311
|
+
/* @__PURE__ */ [...clockAgnostic, ...clock24, ...clock12, ...fractionalSeconds].map((format2) => {
|
|
250
312
|
return [format2[0], format2];
|
|
251
313
|
})
|
|
252
314
|
);
|
|
253
315
|
var dayPeriodMap = /* @__PURE__ */ new Map();
|
|
254
|
-
var styles = [
|
|
255
|
-
"full",
|
|
256
|
-
"long",
|
|
257
|
-
"medium",
|
|
258
|
-
"short"
|
|
259
|
-
];
|
|
316
|
+
var styles = ["full", "long", "medium", "short"];
|
|
260
317
|
var two = (n) => String(n).padStart(2, "0");
|
|
261
318
|
var four = (n) => String(n).padStart(2, "0");
|
|
262
319
|
function normStr(part) {
|
|
@@ -269,8 +326,7 @@ function fill(inputDate, parts2, locale, genitive = false, offset2 = null) {
|
|
|
269
326
|
const partMap = createPartMap(inputDate, parts2, locale, genitive);
|
|
270
327
|
const d = date(inputDate);
|
|
271
328
|
function value({ partName, partValue, token }) {
|
|
272
|
-
if (partName === "literal")
|
|
273
|
-
return partValue;
|
|
329
|
+
if (partName === "literal") return partValue;
|
|
274
330
|
const value2 = partMap[partName];
|
|
275
331
|
if (partName === "hour" && token === "H") {
|
|
276
332
|
return value2.replace(/^0/, "") || "0";
|
|
@@ -282,6 +338,9 @@ function fill(inputDate, parts2, locale, genitive = false, offset2 = null) {
|
|
|
282
338
|
const p = ap(d.getUTCHours() < 12 ? "am" : "pm", locale);
|
|
283
339
|
return token === "A" ? p.toUpperCase() : p.toLowerCase();
|
|
284
340
|
}
|
|
341
|
+
if (partName === "fractionalSecond") {
|
|
342
|
+
return String(d.getUTCMilliseconds()).padStart(3, "0");
|
|
343
|
+
}
|
|
285
344
|
if (partName === "timeZoneName") {
|
|
286
345
|
return offset2 != null ? offset2 : minsToOffset(-1 * d.getTimezoneOffset(), token);
|
|
287
346
|
}
|
|
@@ -307,8 +366,7 @@ function createPartMap(inputDate, parts2, locale, genitive = false) {
|
|
|
307
366
|
preciseLocale,
|
|
308
367
|
requestedParts.reduce(
|
|
309
368
|
(options, part) => {
|
|
310
|
-
if (part.partName === "literal")
|
|
311
|
-
return options;
|
|
369
|
+
if (part.partName === "literal") return options;
|
|
312
370
|
if (genitive && genitiveTokens.includes(part.token)) {
|
|
313
371
|
genitiveParts.push(part);
|
|
314
372
|
}
|
|
@@ -335,9 +393,7 @@ function createPartMap(inputDate, parts2, locale, genitive = false) {
|
|
|
335
393
|
}).formatToParts(d).map(normStr);
|
|
336
394
|
break;
|
|
337
395
|
}
|
|
338
|
-
const genitiveFormattedPart = formattedParts.find(
|
|
339
|
-
(p) => p.type === part.partName
|
|
340
|
-
);
|
|
396
|
+
const genitiveFormattedPart = formattedParts.find((p) => p.type === part.partName);
|
|
341
397
|
const index = valueParts.findIndex((p) => p.type === part.partName);
|
|
342
398
|
if (genitiveFormattedPart && index > -1) {
|
|
343
399
|
valueParts[index] = genitiveFormattedPart;
|
|
@@ -345,50 +401,48 @@ function createPartMap(inputDate, parts2, locale, genitive = false) {
|
|
|
345
401
|
}
|
|
346
402
|
}
|
|
347
403
|
}
|
|
348
|
-
if (hour12.length)
|
|
349
|
-
|
|
350
|
-
if (hour24.length)
|
|
351
|
-
addValues(hour24);
|
|
404
|
+
if (hour12.length) addValues(hour12, true);
|
|
405
|
+
if (hour24.length) addValues(hour24);
|
|
352
406
|
return valueParts.reduce((map, part) => {
|
|
353
407
|
map[part.type] = part.value;
|
|
354
408
|
return map;
|
|
355
409
|
}, {});
|
|
356
410
|
}
|
|
357
|
-
function
|
|
358
|
-
const
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
);
|
|
362
|
-
const
|
|
363
|
-
const sign = timeDiffInMins < 0 ? "-" : "+";
|
|
411
|
+
function secsToOffset(totalSecs, token = "Z") {
|
|
412
|
+
const sign = totalSecs < 0 ? "-" : "+";
|
|
413
|
+
const absSecs = Math.abs(totalSecs);
|
|
414
|
+
const hours = String(Math.floor(absSecs / 3600)).padStart(2, "0");
|
|
415
|
+
const mins = String(Math.floor(absSecs % 3600 / 60)).padStart(2, "0");
|
|
416
|
+
const secs = Math.round(absSecs % 60);
|
|
364
417
|
if (token === "ZZ") {
|
|
365
|
-
return `${sign}${hours}${mins}`;
|
|
418
|
+
return secs === 0 ? `${sign}${hours}${mins}` : `${sign}${hours}${mins}${String(secs).padStart(2, "0")}`;
|
|
366
419
|
}
|
|
367
|
-
return `${sign}${hours}:${mins}`;
|
|
420
|
+
return secs === 0 ? `${sign}${hours}:${mins}` : `${sign}${hours}:${mins}:${String(secs).padStart(2, "0")}`;
|
|
421
|
+
}
|
|
422
|
+
function minsToOffset(timeDiffInMins, token = "Z") {
|
|
423
|
+
return secsToOffset(timeDiffInMins * 60, token);
|
|
368
424
|
}
|
|
369
|
-
function
|
|
425
|
+
function offsetToSecs(offset2, token) {
|
|
370
426
|
validOffset(offset2, token);
|
|
371
|
-
const
|
|
372
|
-
|
|
373
|
-
);
|
|
374
|
-
|
|
375
|
-
return sign === "+" ? offsetInMins : -offsetInMins;
|
|
427
|
+
const match = offset2.match(/([+-])([0-3][0-9]):?([0-5][0-9])(?::?([0-5][0-9]))?/);
|
|
428
|
+
const [_, sign, hours, mins, secs = "0"] = match;
|
|
429
|
+
const totalSecs = Number(hours) * 3600 + Number(mins) * 60 + Number(secs);
|
|
430
|
+
return sign === "+" ? totalSecs : -totalSecs;
|
|
376
431
|
}
|
|
377
432
|
function validOffset(offset2, token = "Z") {
|
|
378
433
|
const valid = ((token2) => {
|
|
379
434
|
switch (token2) {
|
|
380
435
|
case "Z":
|
|
381
|
-
return /^([+-])[0-3][0-9]:[0-
|
|
436
|
+
return /^([+-])[0-3][0-9]:[0-5][0-9](?::[0-5][0-9])?$/.test(offset2);
|
|
382
437
|
case "ZZ":
|
|
383
|
-
return /^([+-])[0-3][0-9][0-
|
|
438
|
+
return /^([+-])[0-3][0-9][0-5][0-9](?:[0-5][0-9])?$/.test(offset2);
|
|
384
439
|
}
|
|
385
440
|
})(token);
|
|
386
|
-
if (!valid)
|
|
387
|
-
throw new Error(`Invalid offset: ${offset2}`);
|
|
441
|
+
if (!valid) throw new Error(`Invalid offset: ${offset2}`);
|
|
388
442
|
return offset2;
|
|
389
443
|
}
|
|
390
444
|
function escapeTokens(str) {
|
|
391
|
-
return clockAgnostic.concat(clock24).concat(clock12).sort((a, b) => a[0].length > b[0].length ? 1 : -1).reduce((target, part) => {
|
|
445
|
+
return clockAgnostic.concat(clock24).concat(clock12).concat(fractionalSeconds).sort((a, b) => a[0].length > b[0].length ? 1 : -1).reduce((target, part) => {
|
|
392
446
|
return target.replace(part[0], `\\${part[0]}`);
|
|
393
447
|
}, str);
|
|
394
448
|
}
|
|
@@ -402,10 +456,8 @@ function validate(parts2) {
|
|
|
402
456
|
throw new Error(`Numbers in format (${part.partValue}).`);
|
|
403
457
|
}
|
|
404
458
|
if (lastPart && lastPart.partName !== "literal" && part.partName !== "literal") {
|
|
405
|
-
if (!(lastPart.token in fixedLength) && !(part.token in fixedLength) && !(isNumeric(lastPart) && part.token.toLowerCase() === "a")) {
|
|
406
|
-
throw new Error(
|
|
407
|
-
`Illegal adjacent tokens (${lastPart.token}, ${part.token})`
|
|
408
|
-
);
|
|
459
|
+
if (!(lastPart.token in fixedLength) && !(part.token in fixedLength) && !(isNumeric(lastPart) && part.token.toLowerCase() === "a") && lastPart.token !== "SSS") {
|
|
460
|
+
throw new Error(`Illegal adjacent tokens (${lastPart.token}, ${part.token})`);
|
|
409
461
|
}
|
|
410
462
|
}
|
|
411
463
|
lastPart = part;
|
|
@@ -422,8 +474,7 @@ function getOffsetFormat(format2) {
|
|
|
422
474
|
// src/ap.ts
|
|
423
475
|
function ap(ampm, locale) {
|
|
424
476
|
const l = dayPeriodMap.get(locale);
|
|
425
|
-
if (l && l[ampm])
|
|
426
|
-
return l[ampm];
|
|
477
|
+
if (l && l[ampm]) return l[ampm];
|
|
427
478
|
const specimen = new Date(specDate);
|
|
428
479
|
specimen.setUTCHours(ampm === "am" ? 5 : 20);
|
|
429
480
|
const subparts = new Intl.DateTimeFormat(locale, {
|
|
@@ -446,16 +497,10 @@ function ap(ampm, locale) {
|
|
|
446
497
|
// src/applyOffset.ts
|
|
447
498
|
function applyOffset(dateInput, offset2 = "+00:00") {
|
|
448
499
|
const d = date(dateInput);
|
|
449
|
-
const
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
case 6:
|
|
454
|
-
return "Z";
|
|
455
|
-
}
|
|
456
|
-
})();
|
|
457
|
-
const timeDiffInMins = offsetToMins(offset2, token);
|
|
458
|
-
return new Date(d.getTime() + timeDiffInMins * 1e3 * 60);
|
|
500
|
+
const len = fixedLengthByOffset(offset2);
|
|
501
|
+
const token = len === 5 || len === 8 ? "ZZ" : "Z";
|
|
502
|
+
const timeDiffInSecs = offsetToSecs(offset2, token);
|
|
503
|
+
return new Date(d.getTime() + timeDiffInSecs * 1e3);
|
|
459
504
|
}
|
|
460
505
|
|
|
461
506
|
// src/deviceTZ.ts
|
|
@@ -466,22 +511,24 @@ function deviceTZ() {
|
|
|
466
511
|
// src/offset.ts
|
|
467
512
|
function relativeTime(d, timeZone) {
|
|
468
513
|
const utcParts = new Intl.DateTimeFormat("en-US", {
|
|
514
|
+
era: "short",
|
|
469
515
|
year: "numeric",
|
|
470
|
-
month: "
|
|
471
|
-
day: "
|
|
472
|
-
hour: "
|
|
473
|
-
minute: "
|
|
474
|
-
second: "
|
|
516
|
+
month: "numeric",
|
|
517
|
+
day: "numeric",
|
|
518
|
+
hour: "numeric",
|
|
519
|
+
minute: "numeric",
|
|
520
|
+
second: "numeric",
|
|
475
521
|
timeZone,
|
|
476
522
|
hourCycle: "h23"
|
|
477
|
-
}).formatToParts(d)
|
|
478
|
-
const
|
|
523
|
+
}).formatToParts(d);
|
|
524
|
+
const p = {};
|
|
479
525
|
utcParts.forEach((part) => {
|
|
480
|
-
|
|
526
|
+
if (part.type !== "literal") p[part.type] = part.value;
|
|
481
527
|
});
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
);
|
|
528
|
+
const year = p.era === "BC" ? 1 - Number(p.year) : Number(p.year);
|
|
529
|
+
const result = new Date(Date.UTC(0, 0, 1, Number(p.hour), Number(p.minute), Number(p.second)));
|
|
530
|
+
result.setUTCFullYear(year, Number(p.month) - 1, Number(p.day));
|
|
531
|
+
return result;
|
|
485
532
|
}
|
|
486
533
|
function offset(utcTime, tzA = "UTC", tzB = "device", timeZoneToken = "Z") {
|
|
487
534
|
var _a;
|
|
@@ -489,10 +536,8 @@ function offset(utcTime, tzA = "UTC", tzB = "device", timeZoneToken = "Z") {
|
|
|
489
536
|
const d = date(utcTime);
|
|
490
537
|
const timeA = relativeTime(d, tzA);
|
|
491
538
|
const timeB = relativeTime(d, tzB);
|
|
492
|
-
const
|
|
493
|
-
|
|
494
|
-
);
|
|
495
|
-
return minsToOffset(timeDiffInMins, timeZoneToken);
|
|
539
|
+
const timeDiffInSecs = Math.round((timeB.getTime() - timeA.getTime()) / 1e3);
|
|
540
|
+
return secsToOffset(timeDiffInSecs, timeZoneToken);
|
|
496
541
|
}
|
|
497
542
|
|
|
498
543
|
// src/tzDate.ts
|
|
@@ -519,7 +564,7 @@ function dayEnd(inputDate) {
|
|
|
519
564
|
// src/dayStart.ts
|
|
520
565
|
function dayStart(inputDate) {
|
|
521
566
|
const d = date(inputDate);
|
|
522
|
-
d.setHours(0, 0, 0);
|
|
567
|
+
d.setHours(0, 0, 0, 0);
|
|
523
568
|
return d;
|
|
524
569
|
}
|
|
525
570
|
|
|
@@ -531,13 +576,11 @@ function parts(format2, locale) {
|
|
|
531
576
|
let f = format2;
|
|
532
577
|
let match = 0;
|
|
533
578
|
const testPattern = (pattern) => {
|
|
534
|
-
if (!pattern[2])
|
|
535
|
-
pattern[2] = new RegExp(`(.)?(${pattern[0]})`, "g");
|
|
579
|
+
if (!pattern[2]) pattern[2] = new RegExp(`(.)?(${pattern[0]})`, "g");
|
|
536
580
|
if (pattern[2].test(f)) {
|
|
537
581
|
let didAdd = 0;
|
|
538
582
|
f = f.replace(pattern[2], (_, prefix, actualMatch) => {
|
|
539
|
-
if (prefix === "\\")
|
|
540
|
-
return actualMatch;
|
|
583
|
+
if (prefix === "\\") return actualMatch;
|
|
541
584
|
return `${typeof prefix === "string" ? prefix : ""}{!${didAdd++ ? match : match++}!}`;
|
|
542
585
|
});
|
|
543
586
|
return !!didAdd;
|
|
@@ -564,7 +607,7 @@ function parts(format2, locale) {
|
|
|
564
607
|
hour12
|
|
565
608
|
};
|
|
566
609
|
}
|
|
567
|
-
const found24Patterns = clockAgnostic.filter(testPattern).concat(clock24.filter(testPattern)).map(createPart.bind(null, false));
|
|
610
|
+
const found24Patterns = clockAgnostic.filter(testPattern).concat(clock24.filter(testPattern)).concat(fractionalSeconds.filter(testPattern)).map(createPart.bind(null, false));
|
|
568
611
|
const parts2 = validate2(
|
|
569
612
|
found24Patterns.concat(
|
|
570
613
|
clock12.filter(testPattern).map(createPart.bind(null, true))
|
|
@@ -593,10 +636,8 @@ function styleParts(format2, locale) {
|
|
|
593
636
|
if (typeof format2 === "string") {
|
|
594
637
|
options.dateStyle = format2;
|
|
595
638
|
} else {
|
|
596
|
-
if ("date" in format2)
|
|
597
|
-
|
|
598
|
-
if ("time" in format2)
|
|
599
|
-
options.timeStyle = format2.time;
|
|
639
|
+
if ("date" in format2) options.dateStyle = format2.date;
|
|
640
|
+
if ("time" in format2) options.timeStyle = format2.time;
|
|
600
641
|
}
|
|
601
642
|
const formatter = new Intl.DateTimeFormat(locale, options);
|
|
602
643
|
const segments = formatter.formatToParts(new Date(specDate)).map(normStr);
|
|
@@ -612,11 +653,9 @@ function styleParts(format2, locale) {
|
|
|
612
653
|
part.type === "hour" ? hourType : void 0,
|
|
613
654
|
options
|
|
614
655
|
);
|
|
615
|
-
if (formatPattern === void 0)
|
|
616
|
-
return;
|
|
656
|
+
if (formatPattern === void 0) return;
|
|
617
657
|
const partValue = formatPattern[1][partName];
|
|
618
|
-
if (!partValue)
|
|
619
|
-
return;
|
|
658
|
+
if (!partValue) return;
|
|
620
659
|
if (!formatPattern[2])
|
|
621
660
|
formatPattern[2] = new RegExp(`${formatPattern[0]}`, "g");
|
|
622
661
|
return {
|
|
@@ -637,8 +676,7 @@ function guessPattern(partName, partValue, locale, hour, options) {
|
|
|
637
676
|
case "year":
|
|
638
677
|
return l === 2 ? tokens.get("YY") : tokens.get("YYYY");
|
|
639
678
|
case "month":
|
|
640
|
-
if (n)
|
|
641
|
-
return l === 1 ? tokens.get("M") : tokens.get("MM");
|
|
679
|
+
if (n) return l === 1 ? tokens.get("M") : tokens.get("MM");
|
|
642
680
|
style = partStyle(locale, partName, partValue);
|
|
643
681
|
switch (style) {
|
|
644
682
|
case "long":
|
|
@@ -659,8 +697,7 @@ function guessPattern(partName, partValue, locale, hour, options) {
|
|
|
659
697
|
return tokens.get("dddd");
|
|
660
698
|
}
|
|
661
699
|
case "hour":
|
|
662
|
-
if (hour === 12)
|
|
663
|
-
return l === 1 ? tokens.get("h") : tokens.get("hh");
|
|
700
|
+
if (hour === 12) return l === 1 ? tokens.get("h") : tokens.get("hh");
|
|
664
701
|
return l === 1 ? tokens.get("H") : tokens.get("HH");
|
|
665
702
|
case "minute":
|
|
666
703
|
return l === 1 ? tokens.get("m") : tokens.get("mm");
|
|
@@ -685,8 +722,7 @@ function partStyle(locale, part, value) {
|
|
|
685
722
|
const formats2 = {};
|
|
686
723
|
for (let i = 0; i < 12; i++) {
|
|
687
724
|
date2.setMonth(0 + i);
|
|
688
|
-
if (i in weekdays)
|
|
689
|
-
date2.setDate(weekdays[i]);
|
|
725
|
+
if (i in weekdays) date2.setDate(weekdays[i]);
|
|
690
726
|
date2.setUTCHours(8 + i);
|
|
691
727
|
for (const style of partStyles) {
|
|
692
728
|
const segments = new Intl.DateTimeFormat(
|
|
@@ -705,12 +741,10 @@ function partStyle(locale, part, value) {
|
|
|
705
741
|
(part2) => part2.type === "month"
|
|
706
742
|
);
|
|
707
743
|
const index = segments.findIndex((part2) => part2.type === "month");
|
|
708
|
-
if (index > -1 && genitiveMonth)
|
|
709
|
-
segments[index] = genitiveMonth;
|
|
744
|
+
if (index > -1 && genitiveMonth) segments[index] = genitiveMonth;
|
|
710
745
|
}
|
|
711
746
|
segments.forEach((part2) => {
|
|
712
|
-
if (part2.type === "literal")
|
|
713
|
-
return;
|
|
747
|
+
if (part2.type === "literal") return;
|
|
714
748
|
const type = part2.type;
|
|
715
749
|
formats2[type] = Object.assign(formats2[type] || {}, {
|
|
716
750
|
[part2.value]: style
|
|
@@ -752,8 +786,7 @@ function format(inputDateOrOptions, format2 = "long", locale = "device", genitiv
|
|
|
752
786
|
tz
|
|
753
787
|
} = inputDateOrOptions);
|
|
754
788
|
}
|
|
755
|
-
if (format2 === "ISO8601")
|
|
756
|
-
return date(inputDateOrOptions).toISOString();
|
|
789
|
+
if (format2 === "ISO8601") return date(inputDateOrOptions).toISOString();
|
|
757
790
|
if (tz) {
|
|
758
791
|
forceOffset = offset(inputDateOrOptions, "utc", tz, getOffsetFormat(format2));
|
|
759
792
|
}
|
|
@@ -769,7 +802,7 @@ function format(inputDateOrOptions, format2 = "long", locale = "device", genitiv
|
|
|
769
802
|
}
|
|
770
803
|
return fill(
|
|
771
804
|
inputDateOrOptions,
|
|
772
|
-
parts(format2, locale).filter(partFilter != null ? partFilter : () => true),
|
|
805
|
+
parts(format2, locale).filter(partFilter != null ? partFilter : (() => true)),
|
|
773
806
|
locale,
|
|
774
807
|
genitive,
|
|
775
808
|
forceOffset
|
|
@@ -803,7 +836,7 @@ function hourEnd(inputDate) {
|
|
|
803
836
|
// src/hourStart.ts
|
|
804
837
|
function hourStart(inputDate) {
|
|
805
838
|
const d = date(inputDate);
|
|
806
|
-
d.setMinutes(0, 0);
|
|
839
|
+
d.setMinutes(0, 0, 0);
|
|
807
840
|
return d;
|
|
808
841
|
}
|
|
809
842
|
|
|
@@ -817,7 +850,7 @@ function minuteEnd(inputDate) {
|
|
|
817
850
|
// src/minuteStart.ts
|
|
818
851
|
function minuteStart(inputDate) {
|
|
819
852
|
const d = date(inputDate);
|
|
820
|
-
d.setSeconds(0);
|
|
853
|
+
d.setSeconds(0, 0);
|
|
821
854
|
return d;
|
|
822
855
|
}
|
|
823
856
|
|
|
@@ -825,7 +858,7 @@ function minuteStart(inputDate) {
|
|
|
825
858
|
function monthStart(inputDate) {
|
|
826
859
|
const d = date(inputDate);
|
|
827
860
|
d.setDate(1);
|
|
828
|
-
d.setHours(0, 0, 0);
|
|
861
|
+
d.setHours(0, 0, 0, 0);
|
|
829
862
|
return d;
|
|
830
863
|
}
|
|
831
864
|
|
|
@@ -861,13 +894,11 @@ function nearestDay(inputDate, search, constraint = 7) {
|
|
|
861
894
|
for (let i = 0; i <= increments || i < decrements; i++) {
|
|
862
895
|
if (i <= increments) {
|
|
863
896
|
const next = addDay(d, i);
|
|
864
|
-
if (search(next))
|
|
865
|
-
return next;
|
|
897
|
+
if (search(next)) return next;
|
|
866
898
|
}
|
|
867
899
|
if (i && i <= decrements) {
|
|
868
900
|
const prev = addDay(d, -i);
|
|
869
|
-
if (search(prev))
|
|
870
|
-
return prev;
|
|
901
|
+
if (search(prev)) return prev;
|
|
871
902
|
}
|
|
872
903
|
}
|
|
873
904
|
return null;
|
|
@@ -876,8 +907,7 @@ function nearestDay(inputDate, search, constraint = 7) {
|
|
|
876
907
|
// src/range.ts
|
|
877
908
|
function range(token, locale = "en", genitive = false) {
|
|
878
909
|
const r = (n, c) => Array(n).fill("").map((_, i) => `${c(i)}`);
|
|
879
|
-
if (token === "M")
|
|
880
|
-
return r(12, (i) => i + 1);
|
|
910
|
+
if (token === "M") return r(12, (i) => i + 1);
|
|
881
911
|
if (token === "MM")
|
|
882
912
|
return r(12, (i) => {
|
|
883
913
|
const m = i + 1;
|
|
@@ -935,19 +965,16 @@ function parse(dateStrOrOptions, format2 = "ISO8601", locale = "device") {
|
|
|
935
965
|
} else {
|
|
936
966
|
dateStr = dateStrOrOptions;
|
|
937
967
|
}
|
|
938
|
-
if (!dateStr)
|
|
939
|
-
throw new Error("parse() requires a date string.");
|
|
968
|
+
if (!dateStr) throw new Error("parse() requires a date string.");
|
|
940
969
|
const invalid = () => {
|
|
941
970
|
throw new Error(
|
|
942
971
|
`Date (${dateStr}) does not match format (${formatStr(format2, locale)})`
|
|
943
972
|
);
|
|
944
973
|
};
|
|
945
|
-
if (format2 === "ISO8601")
|
|
946
|
-
return date(dateStr);
|
|
974
|
+
if (format2 === "ISO8601") return date(dateStr);
|
|
947
975
|
const genitive = styles.includes(format2) || typeof format2 === "object";
|
|
948
976
|
const formatParts = validate(parts(format2, locale).filter(partFilter));
|
|
949
|
-
if (!formatParts.length)
|
|
950
|
-
throw new Error("parse() requires a pattern.");
|
|
977
|
+
if (!formatParts.length) throw new Error("parse() requires a pattern.");
|
|
951
978
|
let parsedParts;
|
|
952
979
|
try {
|
|
953
980
|
parsedParts = parseParts(dateStr, formatParts);
|
|
@@ -961,17 +988,19 @@ function parse(dateStrOrOptions, format2 = "ISO8601", locale = "device") {
|
|
|
961
988
|
["DD", now.getDate()],
|
|
962
989
|
["HH", 0],
|
|
963
990
|
["mm", 0],
|
|
964
|
-
["ss", 0]
|
|
991
|
+
["ss", 0],
|
|
992
|
+
["SSS", 0]
|
|
965
993
|
]);
|
|
966
994
|
let a = null;
|
|
967
995
|
let offset2 = "";
|
|
968
996
|
parsedParts.forEach((part) => {
|
|
969
|
-
if (part.partName === "literal")
|
|
970
|
-
|
|
971
|
-
if (part.token === part.value)
|
|
972
|
-
return invalid();
|
|
997
|
+
if (part.partName === "literal") return;
|
|
998
|
+
if (part.token === part.value) return invalid();
|
|
973
999
|
const v = Number(part.value);
|
|
974
|
-
if (
|
|
1000
|
+
if (part.token === "SSS") {
|
|
1001
|
+
const digits = part.value.padEnd(3, "0").slice(0, 3);
|
|
1002
|
+
parsed.set("SSS", Number(digits));
|
|
1003
|
+
} else if (parsed.has(part.token)) {
|
|
975
1004
|
parsed.set(part.token, v);
|
|
976
1005
|
} else if (part.token === "YY") {
|
|
977
1006
|
parsed.set("YYYY", fourDigitYear(part.value));
|
|
@@ -1011,17 +1040,24 @@ function parse(dateStrOrOptions, format2 = "ISO8601", locale = "device") {
|
|
|
1011
1040
|
parsed.set("HH", 0);
|
|
1012
1041
|
}
|
|
1013
1042
|
parsed.set("MM", (parsed.get("MM") || 1) - 1);
|
|
1014
|
-
let [Y, M, D, h, m, s] = Array.from(parsed.values());
|
|
1043
|
+
let [Y, M, D, h, m, s, ms] = Array.from(parsed.values());
|
|
1015
1044
|
const maxDaysInMonth = monthDays(/* @__PURE__ */ new Date(`${four(Y)}-${two(M + 1)}-10`));
|
|
1016
1045
|
if (maxDaysInMonth < D && dateOverflow === "throw")
|
|
1017
1046
|
throw new Error(`Invalid date ${four(Y)}-${two(M + 1)}-${two(D)}`);
|
|
1018
1047
|
D = dateOverflow === "backward" ? Math.min(D, maxDaysInMonth) : D;
|
|
1019
|
-
const
|
|
1020
|
-
|
|
1021
|
-
|
|
1048
|
+
const msStr = String(ms).padStart(3, "0");
|
|
1049
|
+
if (offset2) {
|
|
1050
|
+
const isoStringUtc = `${four(Y)}-${two(M + 1)}-${two(D)}T${two(h)}:${two(m)}:${two(s)}.${msStr}Z`;
|
|
1051
|
+
const d2 = new Date(isoStringUtc);
|
|
1052
|
+
if (!isFinite(+d2)) return invalid();
|
|
1053
|
+
const len = fixedLengthByOffset(offset2);
|
|
1054
|
+
const token = len === 5 || len === 8 ? "ZZ" : "Z";
|
|
1055
|
+
const offsetSecs = offsetToSecs(offset2, token);
|
|
1056
|
+
return new Date(d2.getTime() - offsetSecs * 1e3);
|
|
1057
|
+
}
|
|
1058
|
+
const isoString = `${four(Y)}-${two(M + 1)}-${two(D)}T${two(h)}:${two(m)}:${two(s)}.${msStr}`;
|
|
1022
1059
|
const d = new Date(isoString);
|
|
1023
|
-
if (isFinite(+d))
|
|
1024
|
-
return d;
|
|
1060
|
+
if (isFinite(+d)) return d;
|
|
1025
1061
|
return invalid();
|
|
1026
1062
|
}
|
|
1027
1063
|
function parseParts(dateStr, formatParts) {
|
|
@@ -1041,13 +1077,18 @@ function parseParts(dateStr, formatParts) {
|
|
|
1041
1077
|
len = current.partValue.length;
|
|
1042
1078
|
} else if (current.partName === "timeZoneName") {
|
|
1043
1079
|
len = fixedLengthByOffset(dateStr.substring(pos));
|
|
1080
|
+
} else if (current.token === "SSS") {
|
|
1081
|
+
let end = pos;
|
|
1082
|
+
while (end < dateStr.length && /\d/.test(dateStr.charAt(end))) {
|
|
1083
|
+
end++;
|
|
1084
|
+
}
|
|
1085
|
+
len = end - pos;
|
|
1044
1086
|
} else if (current.token in fixedLength) {
|
|
1045
1087
|
len = fixedLength[current.token];
|
|
1046
1088
|
} else if (next) {
|
|
1047
1089
|
if (next.partName === "literal") {
|
|
1048
1090
|
len = dateStr.indexOf(next.partValue, pos) - pos;
|
|
1049
|
-
if (len < 0)
|
|
1050
|
-
throw new Error();
|
|
1091
|
+
if (len < 0) throw new Error();
|
|
1051
1092
|
} else if (next.partName === "dayPeriod") {
|
|
1052
1093
|
for (let i2 = 1; i2 <= 4; i2++) {
|
|
1053
1094
|
if (isNaN(Number(dateStr.charAt(pos + i2)))) {
|
|
@@ -1057,8 +1098,7 @@ function parseParts(dateStr, formatParts) {
|
|
|
1057
1098
|
}
|
|
1058
1099
|
} else {
|
|
1059
1100
|
const nextChar = dateStr.substring(pos).search(/\d/);
|
|
1060
|
-
if (nextChar !== -1)
|
|
1061
|
-
len = pos + nextChar;
|
|
1101
|
+
if (nextChar !== -1) len = pos + nextChar;
|
|
1062
1102
|
}
|
|
1063
1103
|
} else {
|
|
1064
1104
|
len = dateStr.length;
|
|
@@ -1083,6 +1123,13 @@ function sameSecond(inputDateA, inputDateB) {
|
|
|
1083
1123
|
return a.getSeconds() === b.getSeconds();
|
|
1084
1124
|
}
|
|
1085
1125
|
|
|
1126
|
+
// src/sameMillisecond.ts
|
|
1127
|
+
function sameMillisecond(inputDateA, inputDateB) {
|
|
1128
|
+
const a = date(inputDateA);
|
|
1129
|
+
const b = date(inputDateB);
|
|
1130
|
+
return a.getMilliseconds() === b.getMilliseconds();
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1086
1133
|
// src/sameMinute.ts
|
|
1087
1134
|
function sameMinute(inputDateA, inputDateB) {
|
|
1088
1135
|
const a = date(inputDateA);
|
|
@@ -1104,14 +1151,62 @@ function sameYear(inputDateA, inputDateB) {
|
|
|
1104
1151
|
return a.getFullYear() === b.getFullYear();
|
|
1105
1152
|
}
|
|
1106
1153
|
|
|
1154
|
+
// src/setMilliseconds.ts
|
|
1155
|
+
function setMilliseconds(inputDate, ms) {
|
|
1156
|
+
const d = date(inputDate);
|
|
1157
|
+
d.setMilliseconds(ms);
|
|
1158
|
+
return d;
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
// src/setSeconds.ts
|
|
1162
|
+
function setSeconds(inputDate, second) {
|
|
1163
|
+
const d = date(inputDate);
|
|
1164
|
+
d.setSeconds(second);
|
|
1165
|
+
return d;
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
// src/setMinutes.ts
|
|
1169
|
+
function setMinutes(inputDate, minute) {
|
|
1170
|
+
const d = date(inputDate);
|
|
1171
|
+
d.setMinutes(minute);
|
|
1172
|
+
return d;
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
// src/setHour.ts
|
|
1176
|
+
function setHour(inputDate, hour) {
|
|
1177
|
+
const d = date(inputDate);
|
|
1178
|
+
d.setHours(hour);
|
|
1179
|
+
return d;
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
// src/setDayOfMonth.ts
|
|
1183
|
+
function setDayOfMonth(inputDate, day, dateOverflow = false) {
|
|
1184
|
+
const d = date(inputDate);
|
|
1185
|
+
const daysInMonth = monthDays(d);
|
|
1186
|
+
if (!dateOverflow) {
|
|
1187
|
+
day = day > daysInMonth ? daysInMonth : day;
|
|
1188
|
+
}
|
|
1189
|
+
d.setDate(day);
|
|
1190
|
+
return d;
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
// src/setMonth.ts
|
|
1194
|
+
function setMonth(inputDate, month, dateOverflow = false) {
|
|
1195
|
+
return handleOverflow(inputDate, (d) => d.setMonth(month), dateOverflow);
|
|
1196
|
+
}
|
|
1197
|
+
|
|
1198
|
+
// src/setYear.ts
|
|
1199
|
+
function setYear(inputDate, year, dateOverflow = false) {
|
|
1200
|
+
return handleOverflow(inputDate, (d) => d.setFullYear(year), dateOverflow);
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1107
1203
|
// src/weekStart.ts
|
|
1108
1204
|
function weekStart(inputDate, startOfWeekDay = 0) {
|
|
1109
1205
|
const d = date(inputDate);
|
|
1110
|
-
let
|
|
1111
|
-
if (
|
|
1112
|
-
|
|
1113
|
-
d.
|
|
1114
|
-
d.setHours(0, 0, 0);
|
|
1206
|
+
let diff2 = startOfWeekDay - d.getDay();
|
|
1207
|
+
if (diff2 > 0) diff2 = diff2 - 7;
|
|
1208
|
+
d.setDate(d.getDate() + diff2);
|
|
1209
|
+
d.setHours(0, 0, 0, 0);
|
|
1115
1210
|
return d;
|
|
1116
1211
|
}
|
|
1117
1212
|
|
|
@@ -1119,24 +1214,22 @@ function weekStart(inputDate, startOfWeekDay = 0) {
|
|
|
1119
1214
|
function weekEnd(inputDate, startOfWeekDay = 0) {
|
|
1120
1215
|
const d = weekStart(inputDate, startOfWeekDay);
|
|
1121
1216
|
d.setDate(d.getDate() + 6);
|
|
1122
|
-
d.setHours(23, 59, 59);
|
|
1217
|
+
d.setHours(23, 59, 59, 999);
|
|
1123
1218
|
return d;
|
|
1124
1219
|
}
|
|
1125
1220
|
|
|
1126
1221
|
// src/yearStart.ts
|
|
1127
1222
|
function yearStart(inputDate) {
|
|
1128
1223
|
const d = date(inputDate);
|
|
1129
|
-
d.setMonth(0);
|
|
1130
|
-
d.
|
|
1131
|
-
d.setHours(0, 0, 0);
|
|
1224
|
+
d.setMonth(0, 1);
|
|
1225
|
+
d.setHours(0, 0, 0, 0);
|
|
1132
1226
|
return d;
|
|
1133
1227
|
}
|
|
1134
1228
|
|
|
1135
1229
|
// src/yearEnd.ts
|
|
1136
1230
|
function yearEnd(inputDate) {
|
|
1137
1231
|
const d = date(inputDate);
|
|
1138
|
-
d.setMonth(11);
|
|
1139
|
-
d.setDate(31);
|
|
1232
|
+
d.setMonth(11, 31);
|
|
1140
1233
|
d.setHours(23, 59, 59, 999);
|
|
1141
1234
|
return d;
|
|
1142
1235
|
}
|
|
@@ -1162,6 +1255,16 @@ function isEqual(dateLeft, dateRight) {
|
|
|
1162
1255
|
return +_dateLeft === +_dateRight;
|
|
1163
1256
|
}
|
|
1164
1257
|
|
|
1258
|
+
// src/isPast.ts
|
|
1259
|
+
function isPast(inputDate) {
|
|
1260
|
+
return isBefore(inputDate);
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
// src/isFuture.ts
|
|
1264
|
+
function isFuture(inputDate) {
|
|
1265
|
+
return isAfter(inputDate);
|
|
1266
|
+
}
|
|
1267
|
+
|
|
1165
1268
|
// src/diffMilliseconds.ts
|
|
1166
1269
|
function diffMilliseconds(dateA, dateB) {
|
|
1167
1270
|
const left = date(dateA);
|
|
@@ -1177,17 +1280,26 @@ function diffRound(value, method = "trunc") {
|
|
|
1177
1280
|
|
|
1178
1281
|
// src/diffSeconds.ts
|
|
1179
1282
|
function diffSeconds(dateA, dateB, roundingMethod) {
|
|
1180
|
-
return diffRound(
|
|
1283
|
+
return diffRound(
|
|
1284
|
+
// @ts-ignore
|
|
1285
|
+
diffMilliseconds(dateA, dateB) / 1e3,
|
|
1286
|
+
roundingMethod
|
|
1287
|
+
);
|
|
1181
1288
|
}
|
|
1182
1289
|
|
|
1183
1290
|
// src/diffMinutes.ts
|
|
1184
1291
|
function diffMinutes(dateA, dateB, roundingMethod) {
|
|
1185
|
-
return diffRound(
|
|
1292
|
+
return diffRound(
|
|
1293
|
+
//@ts-ignore
|
|
1294
|
+
diffMilliseconds(dateA, dateB) / 6e4,
|
|
1295
|
+
roundingMethod
|
|
1296
|
+
);
|
|
1186
1297
|
}
|
|
1187
1298
|
|
|
1188
1299
|
// src/diffHours.ts
|
|
1189
1300
|
function diffHours(dateA, dateB, roundingMethod) {
|
|
1190
1301
|
return diffRound(
|
|
1302
|
+
//@ts-ignore
|
|
1191
1303
|
diffMilliseconds(dateA, dateB) / 36e5,
|
|
1192
1304
|
// 1000 * 60 * 60
|
|
1193
1305
|
roundingMethod
|
|
@@ -1197,6 +1309,7 @@ function diffHours(dateA, dateB, roundingMethod) {
|
|
|
1197
1309
|
// src/diffDays.ts
|
|
1198
1310
|
function diffDays(dateA, dateB, roundingMethod) {
|
|
1199
1311
|
return diffRound(
|
|
1312
|
+
// @ts-ignore
|
|
1200
1313
|
diffMilliseconds(dateA, dateB) / 864e5,
|
|
1201
1314
|
// hour * 24
|
|
1202
1315
|
roundingMethod
|
|
@@ -1234,13 +1347,86 @@ function diffMonths(dateA, dateB) {
|
|
|
1234
1347
|
|
|
1235
1348
|
// src/diffYears.ts
|
|
1236
1349
|
function diffYears(dateA, dateB) {
|
|
1237
|
-
const r = Math.trunc(
|
|
1350
|
+
const r = Math.trunc(
|
|
1351
|
+
//@ts-ignore
|
|
1352
|
+
diffMonths(dateA, dateB) / 12
|
|
1353
|
+
);
|
|
1238
1354
|
return r == 0 ? 0 : r;
|
|
1239
1355
|
}
|
|
1356
|
+
|
|
1357
|
+
// src/diff.ts
|
|
1358
|
+
function negateDuration(duration) {
|
|
1359
|
+
const negated = {};
|
|
1360
|
+
for (const unit of Object.keys(duration)) {
|
|
1361
|
+
negated[unit] = -duration[unit];
|
|
1362
|
+
}
|
|
1363
|
+
return negated;
|
|
1364
|
+
}
|
|
1365
|
+
function calendarDiff(current, target, diffUnit, addUnit) {
|
|
1366
|
+
let amount = diffUnit(current, target);
|
|
1367
|
+
let next = addUnit(current, -amount);
|
|
1368
|
+
while (amount > 0 && next < target) {
|
|
1369
|
+
amount--;
|
|
1370
|
+
next = addUnit(current, -amount);
|
|
1371
|
+
}
|
|
1372
|
+
return [amount, next];
|
|
1373
|
+
}
|
|
1374
|
+
function diff(dateA, dateB, options) {
|
|
1375
|
+
let a = date(dateA);
|
|
1376
|
+
let b = date(dateB);
|
|
1377
|
+
if (a < b) {
|
|
1378
|
+
const duration2 = diff(b, a, options);
|
|
1379
|
+
return (options == null ? void 0 : options.abs) ? duration2 : negateDuration(duration2);
|
|
1380
|
+
}
|
|
1381
|
+
const skip = new Set(options == null ? void 0 : options.skip);
|
|
1382
|
+
const duration = {};
|
|
1383
|
+
if (!skip.has("years")) {
|
|
1384
|
+
const [years, next] = calendarDiff(a, b, diffYears, addYear);
|
|
1385
|
+
a = next;
|
|
1386
|
+
if (years) duration.years = years;
|
|
1387
|
+
}
|
|
1388
|
+
if (!skip.has("months")) {
|
|
1389
|
+
const [months, next] = calendarDiff(a, b, diffMonths, addMonth);
|
|
1390
|
+
a = next;
|
|
1391
|
+
if (months) duration.months = months;
|
|
1392
|
+
}
|
|
1393
|
+
if (!skip.has("weeks")) {
|
|
1394
|
+
const weeks = diffWeeks(a, b);
|
|
1395
|
+
a = addDay(a, -(weeks * 7));
|
|
1396
|
+
if (weeks) duration.weeks = weeks;
|
|
1397
|
+
}
|
|
1398
|
+
if (!skip.has("days")) {
|
|
1399
|
+
const days = diffDays(a, b);
|
|
1400
|
+
a = addDay(a, -days);
|
|
1401
|
+
if (days) duration.days = days;
|
|
1402
|
+
}
|
|
1403
|
+
if (!skip.has("hours")) {
|
|
1404
|
+
const hours = diffHours(a, b);
|
|
1405
|
+
a = addHour(a, -hours);
|
|
1406
|
+
if (hours) duration.hours = hours;
|
|
1407
|
+
}
|
|
1408
|
+
if (!skip.has("minutes")) {
|
|
1409
|
+
const minutes = diffMinutes(a, b);
|
|
1410
|
+
a = addMinute(a, -minutes);
|
|
1411
|
+
if (minutes) duration.minutes = minutes;
|
|
1412
|
+
}
|
|
1413
|
+
if (!skip.has("seconds")) {
|
|
1414
|
+
const seconds = diffSeconds(a, b);
|
|
1415
|
+
a = addSecond(a, -seconds);
|
|
1416
|
+
if (seconds) duration.seconds = seconds;
|
|
1417
|
+
}
|
|
1418
|
+
if (!skip.has("milliseconds")) {
|
|
1419
|
+
const ms = diffMilliseconds(a, b);
|
|
1420
|
+
if (ms) duration.milliseconds = ms;
|
|
1421
|
+
}
|
|
1422
|
+
return duration;
|
|
1423
|
+
}
|
|
1240
1424
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1241
1425
|
0 && (module.exports = {
|
|
1426
|
+
add,
|
|
1242
1427
|
addDay,
|
|
1243
1428
|
addHour,
|
|
1429
|
+
addMillisecond,
|
|
1244
1430
|
addMinute,
|
|
1245
1431
|
addMonth,
|
|
1246
1432
|
addSecond,
|
|
@@ -1251,6 +1437,7 @@ function diffYears(dateA, dateB) {
|
|
|
1251
1437
|
dayEnd,
|
|
1252
1438
|
dayOfYear,
|
|
1253
1439
|
dayStart,
|
|
1440
|
+
diff,
|
|
1254
1441
|
diffDays,
|
|
1255
1442
|
diffHours,
|
|
1256
1443
|
diffMilliseconds,
|
|
@@ -1267,6 +1454,8 @@ function diffYears(dateA, dateB) {
|
|
|
1267
1454
|
isAfter,
|
|
1268
1455
|
isBefore,
|
|
1269
1456
|
isEqual,
|
|
1457
|
+
isFuture,
|
|
1458
|
+
isPast,
|
|
1270
1459
|
iso8601,
|
|
1271
1460
|
minuteEnd,
|
|
1272
1461
|
minuteStart,
|
|
@@ -1282,9 +1471,17 @@ function diffYears(dateA, dateB) {
|
|
|
1282
1471
|
removeOffset,
|
|
1283
1472
|
sameDay,
|
|
1284
1473
|
sameHour,
|
|
1474
|
+
sameMillisecond,
|
|
1285
1475
|
sameMinute,
|
|
1286
1476
|
sameSecond,
|
|
1287
1477
|
sameYear,
|
|
1478
|
+
setDayOfMonth,
|
|
1479
|
+
setHour,
|
|
1480
|
+
setMilliseconds,
|
|
1481
|
+
setMinutes,
|
|
1482
|
+
setMonth,
|
|
1483
|
+
setSeconds,
|
|
1484
|
+
setYear,
|
|
1288
1485
|
tzDate,
|
|
1289
1486
|
weekEnd,
|
|
1290
1487
|
weekStart,
|