@formkit/tempo 0.1.1 → 1.0.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/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 +1 -2
- 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 +1 -2
- 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 +256 -115
- package/dist/bundle.mjs +158 -140
- 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/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/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 +165 -143
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +256 -115
- package/dist/index.d.ts +5 -1
- package/dist/index.mjs +8 -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 +3 -3
- 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/types.d.ts +15 -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/bundle.mjs
CHANGED
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
// src/iso8601.ts
|
|
2
|
-
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})?$/;
|
|
2
|
+
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})?)?$/;
|
|
3
3
|
function iso8601(date2) {
|
|
4
4
|
const matches = date2.match(iso8601Match);
|
|
5
5
|
if (matches) {
|
|
6
6
|
const month = Number(matches[2]);
|
|
7
|
-
if (month < 1 || month > 12)
|
|
8
|
-
return false;
|
|
7
|
+
if (month < 1 || month > 12) return false;
|
|
9
8
|
if (typeof matches[3] !== void 0) {
|
|
10
9
|
const date3 = Number(matches[3]);
|
|
11
|
-
if (date3 < 1 || date3 > 31)
|
|
12
|
-
return false;
|
|
10
|
+
if (date3 < 1 || date3 > 31) return false;
|
|
13
11
|
}
|
|
14
12
|
if (typeof matches[4] !== void 0) {
|
|
15
13
|
const hours = Number(matches[4]);
|
|
16
|
-
if (hours < 0 || hours > 23)
|
|
17
|
-
return false;
|
|
14
|
+
if (hours < 0 || hours > 23) return false;
|
|
18
15
|
}
|
|
19
16
|
return true;
|
|
20
17
|
}
|
|
@@ -34,9 +31,7 @@ function date(date2) {
|
|
|
34
31
|
date2 = /* @__PURE__ */ new Date();
|
|
35
32
|
}
|
|
36
33
|
if (date2 instanceof Date) {
|
|
37
|
-
|
|
38
|
-
d.setMilliseconds(0);
|
|
39
|
-
return d;
|
|
34
|
+
return new Date(date2);
|
|
40
35
|
}
|
|
41
36
|
date2 = date2.trim();
|
|
42
37
|
if (iso8601(date2)) {
|
|
@@ -71,8 +66,7 @@ function monthDays(inputDate) {
|
|
|
71
66
|
function addMonth(inputDate, count = 1, dateOverflow = false) {
|
|
72
67
|
const d = date(inputDate);
|
|
73
68
|
const dayOfMonth = d.getDate();
|
|
74
|
-
if (!dateOverflow)
|
|
75
|
-
d.setDate(1);
|
|
69
|
+
if (!dateOverflow) d.setDate(1);
|
|
76
70
|
d.setMonth(d.getMonth() + count);
|
|
77
71
|
if (!dateOverflow) {
|
|
78
72
|
const daysInMonth = monthDays(d);
|
|
@@ -85,8 +79,7 @@ function addMonth(inputDate, count = 1, dateOverflow = false) {
|
|
|
85
79
|
function addYear(inputDate, count = 1, dateOverflow = false) {
|
|
86
80
|
const d = date(inputDate);
|
|
87
81
|
const dayOfMonth = d.getDate();
|
|
88
|
-
if (!dateOverflow)
|
|
89
|
-
d.setDate(1);
|
|
82
|
+
if (!dateOverflow) d.setDate(1);
|
|
90
83
|
d.setFullYear(d.getFullYear() + count);
|
|
91
84
|
if (!dateOverflow) {
|
|
92
85
|
const daysInMonth = monthDays(d);
|
|
@@ -116,6 +109,13 @@ function addSecond(inputDate, count = 1) {
|
|
|
116
109
|
return d;
|
|
117
110
|
}
|
|
118
111
|
|
|
112
|
+
// src/addMillisecond.ts
|
|
113
|
+
function addMillisecond(inputDate, count = 1) {
|
|
114
|
+
const d = date(inputDate);
|
|
115
|
+
d.setMilliseconds(d.getMilliseconds() + count);
|
|
116
|
+
return d;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
119
|
// src/common.ts
|
|
120
120
|
var specDate = "1999-03-04T02:05:01.000Z";
|
|
121
121
|
var memoParts = /* @__PURE__ */ new Map();
|
|
@@ -148,6 +148,9 @@ var clock12 = [
|
|
|
148
148
|
["a", { dayPeriod: "narrow" }],
|
|
149
149
|
["A", { dayPeriod: "narrow" }]
|
|
150
150
|
];
|
|
151
|
+
var fractionalSeconds = [
|
|
152
|
+
["SSS", { fractionalSecond: "3-digit" }]
|
|
153
|
+
];
|
|
151
154
|
var fixedLength = {
|
|
152
155
|
DD: 2,
|
|
153
156
|
HH: 2,
|
|
@@ -159,6 +162,12 @@ var fixedLength = {
|
|
|
159
162
|
ss: 2
|
|
160
163
|
};
|
|
161
164
|
function fixedLengthByOffset(offsetString) {
|
|
165
|
+
if (/^[+-]\d{2}:\d{2}:\d{2}/.test(offsetString)) {
|
|
166
|
+
return 9;
|
|
167
|
+
}
|
|
168
|
+
if (/^[+-]\d{6}/.test(offsetString)) {
|
|
169
|
+
return 8;
|
|
170
|
+
}
|
|
162
171
|
if (/^[+-]\d{2}:\d{2}/.test(offsetString)) {
|
|
163
172
|
return 6;
|
|
164
173
|
}
|
|
@@ -169,17 +178,12 @@ function fixedLengthByOffset(offsetString) {
|
|
|
169
178
|
}
|
|
170
179
|
var genitiveTokens = ["MMMM", "MMM", "dddd", "ddd"];
|
|
171
180
|
var tokens = /* @__PURE__ */ new Map(
|
|
172
|
-
/* @__PURE__ */ [...clockAgnostic, ...clock24, ...clock12].map((format2) => {
|
|
181
|
+
/* @__PURE__ */ [...clockAgnostic, ...clock24, ...clock12, ...fractionalSeconds].map((format2) => {
|
|
173
182
|
return [format2[0], format2];
|
|
174
183
|
})
|
|
175
184
|
);
|
|
176
185
|
var dayPeriodMap = /* @__PURE__ */ new Map();
|
|
177
|
-
var styles = [
|
|
178
|
-
"full",
|
|
179
|
-
"long",
|
|
180
|
-
"medium",
|
|
181
|
-
"short"
|
|
182
|
-
];
|
|
186
|
+
var styles = ["full", "long", "medium", "short"];
|
|
183
187
|
var two = (n) => String(n).padStart(2, "0");
|
|
184
188
|
var four = (n) => String(n).padStart(2, "0");
|
|
185
189
|
function normStr(part) {
|
|
@@ -192,8 +196,7 @@ function fill(inputDate, parts2, locale, genitive = false, offset2 = null) {
|
|
|
192
196
|
const partMap = createPartMap(inputDate, parts2, locale, genitive);
|
|
193
197
|
const d = date(inputDate);
|
|
194
198
|
function value({ partName, partValue, token }) {
|
|
195
|
-
if (partName === "literal")
|
|
196
|
-
return partValue;
|
|
199
|
+
if (partName === "literal") return partValue;
|
|
197
200
|
const value2 = partMap[partName];
|
|
198
201
|
if (partName === "hour" && token === "H") {
|
|
199
202
|
return value2.replace(/^0/, "") || "0";
|
|
@@ -205,6 +208,9 @@ function fill(inputDate, parts2, locale, genitive = false, offset2 = null) {
|
|
|
205
208
|
const p = ap(d.getUTCHours() < 12 ? "am" : "pm", locale);
|
|
206
209
|
return token === "A" ? p.toUpperCase() : p.toLowerCase();
|
|
207
210
|
}
|
|
211
|
+
if (partName === "fractionalSecond") {
|
|
212
|
+
return String(d.getUTCMilliseconds()).padStart(3, "0");
|
|
213
|
+
}
|
|
208
214
|
if (partName === "timeZoneName") {
|
|
209
215
|
return offset2 != null ? offset2 : minsToOffset(-1 * d.getTimezoneOffset(), token);
|
|
210
216
|
}
|
|
@@ -230,8 +236,7 @@ function createPartMap(inputDate, parts2, locale, genitive = false) {
|
|
|
230
236
|
preciseLocale,
|
|
231
237
|
requestedParts.reduce(
|
|
232
238
|
(options, part) => {
|
|
233
|
-
if (part.partName === "literal")
|
|
234
|
-
return options;
|
|
239
|
+
if (part.partName === "literal") return options;
|
|
235
240
|
if (genitive && genitiveTokens.includes(part.token)) {
|
|
236
241
|
genitiveParts.push(part);
|
|
237
242
|
}
|
|
@@ -258,9 +263,7 @@ function createPartMap(inputDate, parts2, locale, genitive = false) {
|
|
|
258
263
|
}).formatToParts(d).map(normStr);
|
|
259
264
|
break;
|
|
260
265
|
}
|
|
261
|
-
const genitiveFormattedPart = formattedParts.find(
|
|
262
|
-
(p) => p.type === part.partName
|
|
263
|
-
);
|
|
266
|
+
const genitiveFormattedPart = formattedParts.find((p) => p.type === part.partName);
|
|
264
267
|
const index = valueParts.findIndex((p) => p.type === part.partName);
|
|
265
268
|
if (genitiveFormattedPart && index > -1) {
|
|
266
269
|
valueParts[index] = genitiveFormattedPart;
|
|
@@ -268,50 +271,48 @@ function createPartMap(inputDate, parts2, locale, genitive = false) {
|
|
|
268
271
|
}
|
|
269
272
|
}
|
|
270
273
|
}
|
|
271
|
-
if (hour12.length)
|
|
272
|
-
|
|
273
|
-
if (hour24.length)
|
|
274
|
-
addValues(hour24);
|
|
274
|
+
if (hour12.length) addValues(hour12, true);
|
|
275
|
+
if (hour24.length) addValues(hour24);
|
|
275
276
|
return valueParts.reduce((map, part) => {
|
|
276
277
|
map[part.type] = part.value;
|
|
277
278
|
return map;
|
|
278
279
|
}, {});
|
|
279
280
|
}
|
|
280
|
-
function
|
|
281
|
-
const
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
);
|
|
285
|
-
const
|
|
286
|
-
const sign = timeDiffInMins < 0 ? "-" : "+";
|
|
281
|
+
function secsToOffset(totalSecs, token = "Z") {
|
|
282
|
+
const sign = totalSecs < 0 ? "-" : "+";
|
|
283
|
+
const absSecs = Math.abs(totalSecs);
|
|
284
|
+
const hours = String(Math.floor(absSecs / 3600)).padStart(2, "0");
|
|
285
|
+
const mins = String(Math.floor(absSecs % 3600 / 60)).padStart(2, "0");
|
|
286
|
+
const secs = Math.round(absSecs % 60);
|
|
287
287
|
if (token === "ZZ") {
|
|
288
|
-
return `${sign}${hours}${mins}`;
|
|
288
|
+
return secs === 0 ? `${sign}${hours}${mins}` : `${sign}${hours}${mins}${String(secs).padStart(2, "0")}`;
|
|
289
289
|
}
|
|
290
|
-
return `${sign}${hours}:${mins}`;
|
|
290
|
+
return secs === 0 ? `${sign}${hours}:${mins}` : `${sign}${hours}:${mins}:${String(secs).padStart(2, "0")}`;
|
|
291
|
+
}
|
|
292
|
+
function minsToOffset(timeDiffInMins, token = "Z") {
|
|
293
|
+
return secsToOffset(timeDiffInMins * 60, token);
|
|
291
294
|
}
|
|
292
|
-
function
|
|
295
|
+
function offsetToSecs(offset2, token) {
|
|
293
296
|
validOffset(offset2, token);
|
|
294
|
-
const
|
|
295
|
-
|
|
296
|
-
);
|
|
297
|
-
|
|
298
|
-
return sign === "+" ? offsetInMins : -offsetInMins;
|
|
297
|
+
const match = offset2.match(/([+-])([0-3][0-9]):?([0-5][0-9])(?::?([0-5][0-9]))?/);
|
|
298
|
+
const [_, sign, hours, mins, secs = "0"] = match;
|
|
299
|
+
const totalSecs = Number(hours) * 3600 + Number(mins) * 60 + Number(secs);
|
|
300
|
+
return sign === "+" ? totalSecs : -totalSecs;
|
|
299
301
|
}
|
|
300
302
|
function validOffset(offset2, token = "Z") {
|
|
301
303
|
const valid = ((token2) => {
|
|
302
304
|
switch (token2) {
|
|
303
305
|
case "Z":
|
|
304
|
-
return /^([+-])[0-3][0-9]:[0-
|
|
306
|
+
return /^([+-])[0-3][0-9]:[0-5][0-9](?::[0-5][0-9])?$/.test(offset2);
|
|
305
307
|
case "ZZ":
|
|
306
|
-
return /^([+-])[0-3][0-9][0-
|
|
308
|
+
return /^([+-])[0-3][0-9][0-5][0-9](?:[0-5][0-9])?$/.test(offset2);
|
|
307
309
|
}
|
|
308
310
|
})(token);
|
|
309
|
-
if (!valid)
|
|
310
|
-
throw new Error(`Invalid offset: ${offset2}`);
|
|
311
|
+
if (!valid) throw new Error(`Invalid offset: ${offset2}`);
|
|
311
312
|
return offset2;
|
|
312
313
|
}
|
|
313
314
|
function escapeTokens(str) {
|
|
314
|
-
return clockAgnostic.concat(clock24).concat(clock12).sort((a, b) => a[0].length > b[0].length ? 1 : -1).reduce((target, part) => {
|
|
315
|
+
return clockAgnostic.concat(clock24).concat(clock12).concat(fractionalSeconds).sort((a, b) => a[0].length > b[0].length ? 1 : -1).reduce((target, part) => {
|
|
315
316
|
return target.replace(part[0], `\\${part[0]}`);
|
|
316
317
|
}, str);
|
|
317
318
|
}
|
|
@@ -325,10 +326,8 @@ function validate(parts2) {
|
|
|
325
326
|
throw new Error(`Numbers in format (${part.partValue}).`);
|
|
326
327
|
}
|
|
327
328
|
if (lastPart && lastPart.partName !== "literal" && part.partName !== "literal") {
|
|
328
|
-
if (!(lastPart.token in fixedLength) && !(part.token in fixedLength) && !(isNumeric(lastPart) && part.token.toLowerCase() === "a")) {
|
|
329
|
-
throw new Error(
|
|
330
|
-
`Illegal adjacent tokens (${lastPart.token}, ${part.token})`
|
|
331
|
-
);
|
|
329
|
+
if (!(lastPart.token in fixedLength) && !(part.token in fixedLength) && !(isNumeric(lastPart) && part.token.toLowerCase() === "a") && lastPart.token !== "SSS") {
|
|
330
|
+
throw new Error(`Illegal adjacent tokens (${lastPart.token}, ${part.token})`);
|
|
332
331
|
}
|
|
333
332
|
}
|
|
334
333
|
lastPart = part;
|
|
@@ -345,8 +344,7 @@ function getOffsetFormat(format2) {
|
|
|
345
344
|
// src/ap.ts
|
|
346
345
|
function ap(ampm, locale) {
|
|
347
346
|
const l = dayPeriodMap.get(locale);
|
|
348
|
-
if (l && l[ampm])
|
|
349
|
-
return l[ampm];
|
|
347
|
+
if (l && l[ampm]) return l[ampm];
|
|
350
348
|
const specimen = new Date(specDate);
|
|
351
349
|
specimen.setUTCHours(ampm === "am" ? 5 : 20);
|
|
352
350
|
const subparts = new Intl.DateTimeFormat(locale, {
|
|
@@ -369,16 +367,10 @@ function ap(ampm, locale) {
|
|
|
369
367
|
// src/applyOffset.ts
|
|
370
368
|
function applyOffset(dateInput, offset2 = "+00:00") {
|
|
371
369
|
const d = date(dateInput);
|
|
372
|
-
const
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
case 6:
|
|
377
|
-
return "Z";
|
|
378
|
-
}
|
|
379
|
-
})();
|
|
380
|
-
const timeDiffInMins = offsetToMins(offset2, token);
|
|
381
|
-
return new Date(d.getTime() + timeDiffInMins * 1e3 * 60);
|
|
370
|
+
const len = fixedLengthByOffset(offset2);
|
|
371
|
+
const token = len === 5 || len === 8 ? "ZZ" : "Z";
|
|
372
|
+
const timeDiffInSecs = offsetToSecs(offset2, token);
|
|
373
|
+
return new Date(d.getTime() + timeDiffInSecs * 1e3);
|
|
382
374
|
}
|
|
383
375
|
|
|
384
376
|
// src/deviceTZ.ts
|
|
@@ -412,8 +404,8 @@ function offset(utcTime, tzA = "UTC", tzB = "device", timeZoneToken = "Z") {
|
|
|
412
404
|
const d = date(utcTime);
|
|
413
405
|
const timeA = relativeTime(d, tzA);
|
|
414
406
|
const timeB = relativeTime(d, tzB);
|
|
415
|
-
const
|
|
416
|
-
return
|
|
407
|
+
const timeDiffInSecs = Math.round((timeB.getTime() - timeA.getTime()) / 1e3);
|
|
408
|
+
return secsToOffset(timeDiffInSecs, timeZoneToken);
|
|
417
409
|
}
|
|
418
410
|
|
|
419
411
|
// src/tzDate.ts
|
|
@@ -440,7 +432,7 @@ function dayEnd(inputDate) {
|
|
|
440
432
|
// src/dayStart.ts
|
|
441
433
|
function dayStart(inputDate) {
|
|
442
434
|
const d = date(inputDate);
|
|
443
|
-
d.setHours(0, 0, 0);
|
|
435
|
+
d.setHours(0, 0, 0, 0);
|
|
444
436
|
return d;
|
|
445
437
|
}
|
|
446
438
|
|
|
@@ -452,13 +444,11 @@ function parts(format2, locale) {
|
|
|
452
444
|
let f = format2;
|
|
453
445
|
let match = 0;
|
|
454
446
|
const testPattern = (pattern) => {
|
|
455
|
-
if (!pattern[2])
|
|
456
|
-
pattern[2] = new RegExp(`(.)?(${pattern[0]})`, "g");
|
|
447
|
+
if (!pattern[2]) pattern[2] = new RegExp(`(.)?(${pattern[0]})`, "g");
|
|
457
448
|
if (pattern[2].test(f)) {
|
|
458
449
|
let didAdd = 0;
|
|
459
450
|
f = f.replace(pattern[2], (_, prefix, actualMatch) => {
|
|
460
|
-
if (prefix === "\\")
|
|
461
|
-
return actualMatch;
|
|
451
|
+
if (prefix === "\\") return actualMatch;
|
|
462
452
|
return `${typeof prefix === "string" ? prefix : ""}{!${didAdd++ ? match : match++}!}`;
|
|
463
453
|
});
|
|
464
454
|
return !!didAdd;
|
|
@@ -485,7 +475,7 @@ function parts(format2, locale) {
|
|
|
485
475
|
hour12
|
|
486
476
|
};
|
|
487
477
|
}
|
|
488
|
-
const found24Patterns = clockAgnostic.filter(testPattern).concat(clock24.filter(testPattern)).map(createPart.bind(null, false));
|
|
478
|
+
const found24Patterns = clockAgnostic.filter(testPattern).concat(clock24.filter(testPattern)).concat(fractionalSeconds.filter(testPattern)).map(createPart.bind(null, false));
|
|
489
479
|
const parts2 = validate2(
|
|
490
480
|
found24Patterns.concat(
|
|
491
481
|
clock12.filter(testPattern).map(createPart.bind(null, true))
|
|
@@ -514,10 +504,8 @@ function styleParts(format2, locale) {
|
|
|
514
504
|
if (typeof format2 === "string") {
|
|
515
505
|
options.dateStyle = format2;
|
|
516
506
|
} else {
|
|
517
|
-
if ("date" in format2)
|
|
518
|
-
|
|
519
|
-
if ("time" in format2)
|
|
520
|
-
options.timeStyle = format2.time;
|
|
507
|
+
if ("date" in format2) options.dateStyle = format2.date;
|
|
508
|
+
if ("time" in format2) options.timeStyle = format2.time;
|
|
521
509
|
}
|
|
522
510
|
const formatter = new Intl.DateTimeFormat(locale, options);
|
|
523
511
|
const segments = formatter.formatToParts(new Date(specDate)).map(normStr);
|
|
@@ -533,11 +521,9 @@ function styleParts(format2, locale) {
|
|
|
533
521
|
part.type === "hour" ? hourType : void 0,
|
|
534
522
|
options
|
|
535
523
|
);
|
|
536
|
-
if (formatPattern === void 0)
|
|
537
|
-
return;
|
|
524
|
+
if (formatPattern === void 0) return;
|
|
538
525
|
const partValue = formatPattern[1][partName];
|
|
539
|
-
if (!partValue)
|
|
540
|
-
return;
|
|
526
|
+
if (!partValue) return;
|
|
541
527
|
if (!formatPattern[2])
|
|
542
528
|
formatPattern[2] = new RegExp(`${formatPattern[0]}`, "g");
|
|
543
529
|
return {
|
|
@@ -558,8 +544,7 @@ function guessPattern(partName, partValue, locale, hour, options) {
|
|
|
558
544
|
case "year":
|
|
559
545
|
return l === 2 ? tokens.get("YY") : tokens.get("YYYY");
|
|
560
546
|
case "month":
|
|
561
|
-
if (n)
|
|
562
|
-
return l === 1 ? tokens.get("M") : tokens.get("MM");
|
|
547
|
+
if (n) return l === 1 ? tokens.get("M") : tokens.get("MM");
|
|
563
548
|
style = partStyle(locale, partName, partValue);
|
|
564
549
|
switch (style) {
|
|
565
550
|
case "long":
|
|
@@ -580,8 +565,7 @@ function guessPattern(partName, partValue, locale, hour, options) {
|
|
|
580
565
|
return tokens.get("dddd");
|
|
581
566
|
}
|
|
582
567
|
case "hour":
|
|
583
|
-
if (hour === 12)
|
|
584
|
-
return l === 1 ? tokens.get("h") : tokens.get("hh");
|
|
568
|
+
if (hour === 12) return l === 1 ? tokens.get("h") : tokens.get("hh");
|
|
585
569
|
return l === 1 ? tokens.get("H") : tokens.get("HH");
|
|
586
570
|
case "minute":
|
|
587
571
|
return l === 1 ? tokens.get("m") : tokens.get("mm");
|
|
@@ -606,8 +590,7 @@ function partStyle(locale, part, value) {
|
|
|
606
590
|
const formats2 = {};
|
|
607
591
|
for (let i = 0; i < 12; i++) {
|
|
608
592
|
date2.setMonth(0 + i);
|
|
609
|
-
if (i in weekdays)
|
|
610
|
-
date2.setDate(weekdays[i]);
|
|
593
|
+
if (i in weekdays) date2.setDate(weekdays[i]);
|
|
611
594
|
date2.setUTCHours(8 + i);
|
|
612
595
|
for (const style of partStyles) {
|
|
613
596
|
const segments = new Intl.DateTimeFormat(
|
|
@@ -626,12 +609,10 @@ function partStyle(locale, part, value) {
|
|
|
626
609
|
(part2) => part2.type === "month"
|
|
627
610
|
);
|
|
628
611
|
const index = segments.findIndex((part2) => part2.type === "month");
|
|
629
|
-
if (index > -1 && genitiveMonth)
|
|
630
|
-
segments[index] = genitiveMonth;
|
|
612
|
+
if (index > -1 && genitiveMonth) segments[index] = genitiveMonth;
|
|
631
613
|
}
|
|
632
614
|
segments.forEach((part2) => {
|
|
633
|
-
if (part2.type === "literal")
|
|
634
|
-
return;
|
|
615
|
+
if (part2.type === "literal") return;
|
|
635
616
|
const type = part2.type;
|
|
636
617
|
formats2[type] = Object.assign(formats2[type] || {}, {
|
|
637
618
|
[part2.value]: style
|
|
@@ -673,8 +654,7 @@ function format(inputDateOrOptions, format2 = "long", locale = "device", genitiv
|
|
|
673
654
|
tz
|
|
674
655
|
} = inputDateOrOptions);
|
|
675
656
|
}
|
|
676
|
-
if (format2 === "ISO8601")
|
|
677
|
-
return date(inputDateOrOptions).toISOString();
|
|
657
|
+
if (format2 === "ISO8601") return date(inputDateOrOptions).toISOString();
|
|
678
658
|
if (tz) {
|
|
679
659
|
forceOffset = offset(inputDateOrOptions, "utc", tz, getOffsetFormat(format2));
|
|
680
660
|
}
|
|
@@ -690,7 +670,7 @@ function format(inputDateOrOptions, format2 = "long", locale = "device", genitiv
|
|
|
690
670
|
}
|
|
691
671
|
return fill(
|
|
692
672
|
inputDateOrOptions,
|
|
693
|
-
parts(format2, locale).filter(partFilter != null ? partFilter : () => true),
|
|
673
|
+
parts(format2, locale).filter(partFilter != null ? partFilter : (() => true)),
|
|
694
674
|
locale,
|
|
695
675
|
genitive,
|
|
696
676
|
forceOffset
|
|
@@ -724,7 +704,7 @@ function hourEnd(inputDate) {
|
|
|
724
704
|
// src/hourStart.ts
|
|
725
705
|
function hourStart(inputDate) {
|
|
726
706
|
const d = date(inputDate);
|
|
727
|
-
d.setMinutes(0, 0);
|
|
707
|
+
d.setMinutes(0, 0, 0);
|
|
728
708
|
return d;
|
|
729
709
|
}
|
|
730
710
|
|
|
@@ -738,7 +718,7 @@ function minuteEnd(inputDate) {
|
|
|
738
718
|
// src/minuteStart.ts
|
|
739
719
|
function minuteStart(inputDate) {
|
|
740
720
|
const d = date(inputDate);
|
|
741
|
-
d.setSeconds(0);
|
|
721
|
+
d.setSeconds(0, 0);
|
|
742
722
|
return d;
|
|
743
723
|
}
|
|
744
724
|
|
|
@@ -746,7 +726,7 @@ function minuteStart(inputDate) {
|
|
|
746
726
|
function monthStart(inputDate) {
|
|
747
727
|
const d = date(inputDate);
|
|
748
728
|
d.setDate(1);
|
|
749
|
-
d.setHours(0, 0, 0);
|
|
729
|
+
d.setHours(0, 0, 0, 0);
|
|
750
730
|
return d;
|
|
751
731
|
}
|
|
752
732
|
|
|
@@ -782,13 +762,11 @@ function nearestDay(inputDate, search, constraint = 7) {
|
|
|
782
762
|
for (let i = 0; i <= increments || i < decrements; i++) {
|
|
783
763
|
if (i <= increments) {
|
|
784
764
|
const next = addDay(d, i);
|
|
785
|
-
if (search(next))
|
|
786
|
-
return next;
|
|
765
|
+
if (search(next)) return next;
|
|
787
766
|
}
|
|
788
767
|
if (i && i <= decrements) {
|
|
789
768
|
const prev = addDay(d, -i);
|
|
790
|
-
if (search(prev))
|
|
791
|
-
return prev;
|
|
769
|
+
if (search(prev)) return prev;
|
|
792
770
|
}
|
|
793
771
|
}
|
|
794
772
|
return null;
|
|
@@ -797,8 +775,7 @@ function nearestDay(inputDate, search, constraint = 7) {
|
|
|
797
775
|
// src/range.ts
|
|
798
776
|
function range(token, locale = "en", genitive = false) {
|
|
799
777
|
const r = (n, c) => Array(n).fill("").map((_, i) => `${c(i)}`);
|
|
800
|
-
if (token === "M")
|
|
801
|
-
return r(12, (i) => i + 1);
|
|
778
|
+
if (token === "M") return r(12, (i) => i + 1);
|
|
802
779
|
if (token === "MM")
|
|
803
780
|
return r(12, (i) => {
|
|
804
781
|
const m = i + 1;
|
|
@@ -856,19 +833,16 @@ function parse(dateStrOrOptions, format2 = "ISO8601", locale = "device") {
|
|
|
856
833
|
} else {
|
|
857
834
|
dateStr = dateStrOrOptions;
|
|
858
835
|
}
|
|
859
|
-
if (!dateStr)
|
|
860
|
-
throw new Error("parse() requires a date string.");
|
|
836
|
+
if (!dateStr) throw new Error("parse() requires a date string.");
|
|
861
837
|
const invalid = () => {
|
|
862
838
|
throw new Error(
|
|
863
839
|
`Date (${dateStr}) does not match format (${formatStr(format2, locale)})`
|
|
864
840
|
);
|
|
865
841
|
};
|
|
866
|
-
if (format2 === "ISO8601")
|
|
867
|
-
return date(dateStr);
|
|
842
|
+
if (format2 === "ISO8601") return date(dateStr);
|
|
868
843
|
const genitive = styles.includes(format2) || typeof format2 === "object";
|
|
869
844
|
const formatParts = validate(parts(format2, locale).filter(partFilter));
|
|
870
|
-
if (!formatParts.length)
|
|
871
|
-
throw new Error("parse() requires a pattern.");
|
|
845
|
+
if (!formatParts.length) throw new Error("parse() requires a pattern.");
|
|
872
846
|
let parsedParts;
|
|
873
847
|
try {
|
|
874
848
|
parsedParts = parseParts(dateStr, formatParts);
|
|
@@ -882,17 +856,19 @@ function parse(dateStrOrOptions, format2 = "ISO8601", locale = "device") {
|
|
|
882
856
|
["DD", now.getDate()],
|
|
883
857
|
["HH", 0],
|
|
884
858
|
["mm", 0],
|
|
885
|
-
["ss", 0]
|
|
859
|
+
["ss", 0],
|
|
860
|
+
["SSS", 0]
|
|
886
861
|
]);
|
|
887
862
|
let a = null;
|
|
888
863
|
let offset2 = "";
|
|
889
864
|
parsedParts.forEach((part) => {
|
|
890
|
-
if (part.partName === "literal")
|
|
891
|
-
|
|
892
|
-
if (part.token === part.value)
|
|
893
|
-
return invalid();
|
|
865
|
+
if (part.partName === "literal") return;
|
|
866
|
+
if (part.token === part.value) return invalid();
|
|
894
867
|
const v = Number(part.value);
|
|
895
|
-
if (
|
|
868
|
+
if (part.token === "SSS") {
|
|
869
|
+
const digits = part.value.padEnd(3, "0").slice(0, 3);
|
|
870
|
+
parsed.set("SSS", Number(digits));
|
|
871
|
+
} else if (parsed.has(part.token)) {
|
|
896
872
|
parsed.set(part.token, v);
|
|
897
873
|
} else if (part.token === "YY") {
|
|
898
874
|
parsed.set("YYYY", fourDigitYear(part.value));
|
|
@@ -932,17 +908,24 @@ function parse(dateStrOrOptions, format2 = "ISO8601", locale = "device") {
|
|
|
932
908
|
parsed.set("HH", 0);
|
|
933
909
|
}
|
|
934
910
|
parsed.set("MM", (parsed.get("MM") || 1) - 1);
|
|
935
|
-
let [Y, M, D, h, m, s] = Array.from(parsed.values());
|
|
911
|
+
let [Y, M, D, h, m, s, ms] = Array.from(parsed.values());
|
|
936
912
|
const maxDaysInMonth = monthDays(/* @__PURE__ */ new Date(`${four(Y)}-${two(M + 1)}-10`));
|
|
937
913
|
if (maxDaysInMonth < D && dateOverflow === "throw")
|
|
938
914
|
throw new Error(`Invalid date ${four(Y)}-${two(M + 1)}-${two(D)}`);
|
|
939
915
|
D = dateOverflow === "backward" ? Math.min(D, maxDaysInMonth) : D;
|
|
940
|
-
const
|
|
941
|
-
|
|
942
|
-
|
|
916
|
+
const msStr = String(ms).padStart(3, "0");
|
|
917
|
+
if (offset2) {
|
|
918
|
+
const isoStringUtc = `${four(Y)}-${two(M + 1)}-${two(D)}T${two(h)}:${two(m)}:${two(s)}.${msStr}Z`;
|
|
919
|
+
const d2 = new Date(isoStringUtc);
|
|
920
|
+
if (!isFinite(+d2)) return invalid();
|
|
921
|
+
const len = fixedLengthByOffset(offset2);
|
|
922
|
+
const token = len === 5 || len === 8 ? "ZZ" : "Z";
|
|
923
|
+
const offsetSecs = offsetToSecs(offset2, token);
|
|
924
|
+
return new Date(d2.getTime() - offsetSecs * 1e3);
|
|
925
|
+
}
|
|
926
|
+
const isoString = `${four(Y)}-${two(M + 1)}-${two(D)}T${two(h)}:${two(m)}:${two(s)}.${msStr}`;
|
|
943
927
|
const d = new Date(isoString);
|
|
944
|
-
if (isFinite(+d))
|
|
945
|
-
return d;
|
|
928
|
+
if (isFinite(+d)) return d;
|
|
946
929
|
return invalid();
|
|
947
930
|
}
|
|
948
931
|
function parseParts(dateStr, formatParts) {
|
|
@@ -962,13 +945,18 @@ function parseParts(dateStr, formatParts) {
|
|
|
962
945
|
len = current.partValue.length;
|
|
963
946
|
} else if (current.partName === "timeZoneName") {
|
|
964
947
|
len = fixedLengthByOffset(dateStr.substring(pos));
|
|
948
|
+
} else if (current.token === "SSS") {
|
|
949
|
+
let end = pos;
|
|
950
|
+
while (end < dateStr.length && /\d/.test(dateStr.charAt(end))) {
|
|
951
|
+
end++;
|
|
952
|
+
}
|
|
953
|
+
len = end - pos;
|
|
965
954
|
} else if (current.token in fixedLength) {
|
|
966
955
|
len = fixedLength[current.token];
|
|
967
956
|
} else if (next) {
|
|
968
957
|
if (next.partName === "literal") {
|
|
969
958
|
len = dateStr.indexOf(next.partValue, pos) - pos;
|
|
970
|
-
if (len < 0)
|
|
971
|
-
throw new Error();
|
|
959
|
+
if (len < 0) throw new Error();
|
|
972
960
|
} else if (next.partName === "dayPeriod") {
|
|
973
961
|
for (let i2 = 1; i2 <= 4; i2++) {
|
|
974
962
|
if (isNaN(Number(dateStr.charAt(pos + i2)))) {
|
|
@@ -978,8 +966,7 @@ function parseParts(dateStr, formatParts) {
|
|
|
978
966
|
}
|
|
979
967
|
} else {
|
|
980
968
|
const nextChar = dateStr.substring(pos).search(/\d/);
|
|
981
|
-
if (nextChar !== -1)
|
|
982
|
-
len = pos + nextChar;
|
|
969
|
+
if (nextChar !== -1) len = pos + nextChar;
|
|
983
970
|
}
|
|
984
971
|
} else {
|
|
985
972
|
len = dateStr.length;
|
|
@@ -1004,6 +991,13 @@ function sameSecond(inputDateA, inputDateB) {
|
|
|
1004
991
|
return a.getSeconds() === b.getSeconds();
|
|
1005
992
|
}
|
|
1006
993
|
|
|
994
|
+
// src/sameMillisecond.ts
|
|
995
|
+
function sameMillisecond(inputDateA, inputDateB) {
|
|
996
|
+
const a = date(inputDateA);
|
|
997
|
+
const b = date(inputDateB);
|
|
998
|
+
return a.getMilliseconds() === b.getMilliseconds();
|
|
999
|
+
}
|
|
1000
|
+
|
|
1007
1001
|
// src/sameMinute.ts
|
|
1008
1002
|
function sameMinute(inputDateA, inputDateB) {
|
|
1009
1003
|
const a = date(inputDateA);
|
|
@@ -1029,10 +1023,9 @@ function sameYear(inputDateA, inputDateB) {
|
|
|
1029
1023
|
function weekStart(inputDate, startOfWeekDay = 0) {
|
|
1030
1024
|
const d = date(inputDate);
|
|
1031
1025
|
let diff = startOfWeekDay - d.getDay();
|
|
1032
|
-
if (diff > 0)
|
|
1033
|
-
diff = diff - 7;
|
|
1026
|
+
if (diff > 0) diff = diff - 7;
|
|
1034
1027
|
d.setDate(d.getDate() + diff);
|
|
1035
|
-
d.setHours(0, 0, 0);
|
|
1028
|
+
d.setHours(0, 0, 0, 0);
|
|
1036
1029
|
return d;
|
|
1037
1030
|
}
|
|
1038
1031
|
|
|
@@ -1040,24 +1033,22 @@ function weekStart(inputDate, startOfWeekDay = 0) {
|
|
|
1040
1033
|
function weekEnd(inputDate, startOfWeekDay = 0) {
|
|
1041
1034
|
const d = weekStart(inputDate, startOfWeekDay);
|
|
1042
1035
|
d.setDate(d.getDate() + 6);
|
|
1043
|
-
d.setHours(23, 59, 59);
|
|
1036
|
+
d.setHours(23, 59, 59, 999);
|
|
1044
1037
|
return d;
|
|
1045
1038
|
}
|
|
1046
1039
|
|
|
1047
1040
|
// src/yearStart.ts
|
|
1048
1041
|
function yearStart(inputDate) {
|
|
1049
1042
|
const d = date(inputDate);
|
|
1050
|
-
d.setMonth(0);
|
|
1051
|
-
d.
|
|
1052
|
-
d.setHours(0, 0, 0);
|
|
1043
|
+
d.setMonth(0, 1);
|
|
1044
|
+
d.setHours(0, 0, 0, 0);
|
|
1053
1045
|
return d;
|
|
1054
1046
|
}
|
|
1055
1047
|
|
|
1056
1048
|
// src/yearEnd.ts
|
|
1057
1049
|
function yearEnd(inputDate) {
|
|
1058
1050
|
const d = date(inputDate);
|
|
1059
|
-
d.setMonth(11);
|
|
1060
|
-
d.setDate(31);
|
|
1051
|
+
d.setMonth(11, 31);
|
|
1061
1052
|
d.setHours(23, 59, 59, 999);
|
|
1062
1053
|
return d;
|
|
1063
1054
|
}
|
|
@@ -1083,6 +1074,16 @@ function isEqual(dateLeft, dateRight) {
|
|
|
1083
1074
|
return +_dateLeft === +_dateRight;
|
|
1084
1075
|
}
|
|
1085
1076
|
|
|
1077
|
+
// src/isPast.ts
|
|
1078
|
+
function isPast(inputDate) {
|
|
1079
|
+
return isBefore(inputDate);
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
// src/isFuture.ts
|
|
1083
|
+
function isFuture(inputDate) {
|
|
1084
|
+
return isAfter(inputDate);
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1086
1087
|
// src/diffMilliseconds.ts
|
|
1087
1088
|
function diffMilliseconds(dateA, dateB) {
|
|
1088
1089
|
const left = date(dateA);
|
|
@@ -1098,17 +1099,26 @@ function diffRound(value, method = "trunc") {
|
|
|
1098
1099
|
|
|
1099
1100
|
// src/diffSeconds.ts
|
|
1100
1101
|
function diffSeconds(dateA, dateB, roundingMethod) {
|
|
1101
|
-
return diffRound(
|
|
1102
|
+
return diffRound(
|
|
1103
|
+
// @ts-ignore
|
|
1104
|
+
diffMilliseconds(dateA, dateB) / 1e3,
|
|
1105
|
+
roundingMethod
|
|
1106
|
+
);
|
|
1102
1107
|
}
|
|
1103
1108
|
|
|
1104
1109
|
// src/diffMinutes.ts
|
|
1105
1110
|
function diffMinutes(dateA, dateB, roundingMethod) {
|
|
1106
|
-
return diffRound(
|
|
1111
|
+
return diffRound(
|
|
1112
|
+
//@ts-ignore
|
|
1113
|
+
diffMilliseconds(dateA, dateB) / 6e4,
|
|
1114
|
+
roundingMethod
|
|
1115
|
+
);
|
|
1107
1116
|
}
|
|
1108
1117
|
|
|
1109
1118
|
// src/diffHours.ts
|
|
1110
1119
|
function diffHours(dateA, dateB, roundingMethod) {
|
|
1111
1120
|
return diffRound(
|
|
1121
|
+
//@ts-ignore
|
|
1112
1122
|
diffMilliseconds(dateA, dateB) / 36e5,
|
|
1113
1123
|
// 1000 * 60 * 60
|
|
1114
1124
|
roundingMethod
|
|
@@ -1118,6 +1128,7 @@ function diffHours(dateA, dateB, roundingMethod) {
|
|
|
1118
1128
|
// src/diffDays.ts
|
|
1119
1129
|
function diffDays(dateA, dateB, roundingMethod) {
|
|
1120
1130
|
return diffRound(
|
|
1131
|
+
// @ts-ignore
|
|
1121
1132
|
diffMilliseconds(dateA, dateB) / 864e5,
|
|
1122
1133
|
// hour * 24
|
|
1123
1134
|
roundingMethod
|
|
@@ -1155,12 +1166,16 @@ function diffMonths(dateA, dateB) {
|
|
|
1155
1166
|
|
|
1156
1167
|
// src/diffYears.ts
|
|
1157
1168
|
function diffYears(dateA, dateB) {
|
|
1158
|
-
const r = Math.trunc(
|
|
1169
|
+
const r = Math.trunc(
|
|
1170
|
+
//@ts-ignore
|
|
1171
|
+
diffMonths(dateA, dateB) / 12
|
|
1172
|
+
);
|
|
1159
1173
|
return r == 0 ? 0 : r;
|
|
1160
1174
|
}
|
|
1161
1175
|
export {
|
|
1162
1176
|
addDay,
|
|
1163
1177
|
addHour,
|
|
1178
|
+
addMillisecond,
|
|
1164
1179
|
addMinute,
|
|
1165
1180
|
addMonth,
|
|
1166
1181
|
addSecond,
|
|
@@ -1187,6 +1202,8 @@ export {
|
|
|
1187
1202
|
isAfter,
|
|
1188
1203
|
isBefore,
|
|
1189
1204
|
isEqual,
|
|
1205
|
+
isFuture,
|
|
1206
|
+
isPast,
|
|
1190
1207
|
iso8601,
|
|
1191
1208
|
minuteEnd,
|
|
1192
1209
|
minuteStart,
|
|
@@ -1202,6 +1219,7 @@ export {
|
|
|
1202
1219
|
removeOffset,
|
|
1203
1220
|
sameDay,
|
|
1204
1221
|
sameHour,
|
|
1222
|
+
sameMillisecond,
|
|
1205
1223
|
sameMinute,
|
|
1206
1224
|
sameSecond,
|
|
1207
1225
|
sameYear,
|