@formkit/tempo 0.1.2 → 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 -142
- 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 -145
- 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 -5
- 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
291
|
}
|
|
292
|
-
function
|
|
292
|
+
function minsToOffset(timeDiffInMins, token = "Z") {
|
|
293
|
+
return secsToOffset(timeDiffInMins * 60, token);
|
|
294
|
+
}
|
|
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,10 +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
|
-
|
|
417
|
-
);
|
|
418
|
-
return minsToOffset(timeDiffInMins, timeZoneToken);
|
|
407
|
+
const timeDiffInSecs = Math.round((timeB.getTime() - timeA.getTime()) / 1e3);
|
|
408
|
+
return secsToOffset(timeDiffInSecs, timeZoneToken);
|
|
419
409
|
}
|
|
420
410
|
|
|
421
411
|
// src/tzDate.ts
|
|
@@ -442,7 +432,7 @@ function dayEnd(inputDate) {
|
|
|
442
432
|
// src/dayStart.ts
|
|
443
433
|
function dayStart(inputDate) {
|
|
444
434
|
const d = date(inputDate);
|
|
445
|
-
d.setHours(0, 0, 0);
|
|
435
|
+
d.setHours(0, 0, 0, 0);
|
|
446
436
|
return d;
|
|
447
437
|
}
|
|
448
438
|
|
|
@@ -454,13 +444,11 @@ function parts(format2, locale) {
|
|
|
454
444
|
let f = format2;
|
|
455
445
|
let match = 0;
|
|
456
446
|
const testPattern = (pattern) => {
|
|
457
|
-
if (!pattern[2])
|
|
458
|
-
pattern[2] = new RegExp(`(.)?(${pattern[0]})`, "g");
|
|
447
|
+
if (!pattern[2]) pattern[2] = new RegExp(`(.)?(${pattern[0]})`, "g");
|
|
459
448
|
if (pattern[2].test(f)) {
|
|
460
449
|
let didAdd = 0;
|
|
461
450
|
f = f.replace(pattern[2], (_, prefix, actualMatch) => {
|
|
462
|
-
if (prefix === "\\")
|
|
463
|
-
return actualMatch;
|
|
451
|
+
if (prefix === "\\") return actualMatch;
|
|
464
452
|
return `${typeof prefix === "string" ? prefix : ""}{!${didAdd++ ? match : match++}!}`;
|
|
465
453
|
});
|
|
466
454
|
return !!didAdd;
|
|
@@ -487,7 +475,7 @@ function parts(format2, locale) {
|
|
|
487
475
|
hour12
|
|
488
476
|
};
|
|
489
477
|
}
|
|
490
|
-
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));
|
|
491
479
|
const parts2 = validate2(
|
|
492
480
|
found24Patterns.concat(
|
|
493
481
|
clock12.filter(testPattern).map(createPart.bind(null, true))
|
|
@@ -516,10 +504,8 @@ function styleParts(format2, locale) {
|
|
|
516
504
|
if (typeof format2 === "string") {
|
|
517
505
|
options.dateStyle = format2;
|
|
518
506
|
} else {
|
|
519
|
-
if ("date" in format2)
|
|
520
|
-
|
|
521
|
-
if ("time" in format2)
|
|
522
|
-
options.timeStyle = format2.time;
|
|
507
|
+
if ("date" in format2) options.dateStyle = format2.date;
|
|
508
|
+
if ("time" in format2) options.timeStyle = format2.time;
|
|
523
509
|
}
|
|
524
510
|
const formatter = new Intl.DateTimeFormat(locale, options);
|
|
525
511
|
const segments = formatter.formatToParts(new Date(specDate)).map(normStr);
|
|
@@ -535,11 +521,9 @@ function styleParts(format2, locale) {
|
|
|
535
521
|
part.type === "hour" ? hourType : void 0,
|
|
536
522
|
options
|
|
537
523
|
);
|
|
538
|
-
if (formatPattern === void 0)
|
|
539
|
-
return;
|
|
524
|
+
if (formatPattern === void 0) return;
|
|
540
525
|
const partValue = formatPattern[1][partName];
|
|
541
|
-
if (!partValue)
|
|
542
|
-
return;
|
|
526
|
+
if (!partValue) return;
|
|
543
527
|
if (!formatPattern[2])
|
|
544
528
|
formatPattern[2] = new RegExp(`${formatPattern[0]}`, "g");
|
|
545
529
|
return {
|
|
@@ -560,8 +544,7 @@ function guessPattern(partName, partValue, locale, hour, options) {
|
|
|
560
544
|
case "year":
|
|
561
545
|
return l === 2 ? tokens.get("YY") : tokens.get("YYYY");
|
|
562
546
|
case "month":
|
|
563
|
-
if (n)
|
|
564
|
-
return l === 1 ? tokens.get("M") : tokens.get("MM");
|
|
547
|
+
if (n) return l === 1 ? tokens.get("M") : tokens.get("MM");
|
|
565
548
|
style = partStyle(locale, partName, partValue);
|
|
566
549
|
switch (style) {
|
|
567
550
|
case "long":
|
|
@@ -582,8 +565,7 @@ function guessPattern(partName, partValue, locale, hour, options) {
|
|
|
582
565
|
return tokens.get("dddd");
|
|
583
566
|
}
|
|
584
567
|
case "hour":
|
|
585
|
-
if (hour === 12)
|
|
586
|
-
return l === 1 ? tokens.get("h") : tokens.get("hh");
|
|
568
|
+
if (hour === 12) return l === 1 ? tokens.get("h") : tokens.get("hh");
|
|
587
569
|
return l === 1 ? tokens.get("H") : tokens.get("HH");
|
|
588
570
|
case "minute":
|
|
589
571
|
return l === 1 ? tokens.get("m") : tokens.get("mm");
|
|
@@ -608,8 +590,7 @@ function partStyle(locale, part, value) {
|
|
|
608
590
|
const formats2 = {};
|
|
609
591
|
for (let i = 0; i < 12; i++) {
|
|
610
592
|
date2.setMonth(0 + i);
|
|
611
|
-
if (i in weekdays)
|
|
612
|
-
date2.setDate(weekdays[i]);
|
|
593
|
+
if (i in weekdays) date2.setDate(weekdays[i]);
|
|
613
594
|
date2.setUTCHours(8 + i);
|
|
614
595
|
for (const style of partStyles) {
|
|
615
596
|
const segments = new Intl.DateTimeFormat(
|
|
@@ -628,12 +609,10 @@ function partStyle(locale, part, value) {
|
|
|
628
609
|
(part2) => part2.type === "month"
|
|
629
610
|
);
|
|
630
611
|
const index = segments.findIndex((part2) => part2.type === "month");
|
|
631
|
-
if (index > -1 && genitiveMonth)
|
|
632
|
-
segments[index] = genitiveMonth;
|
|
612
|
+
if (index > -1 && genitiveMonth) segments[index] = genitiveMonth;
|
|
633
613
|
}
|
|
634
614
|
segments.forEach((part2) => {
|
|
635
|
-
if (part2.type === "literal")
|
|
636
|
-
return;
|
|
615
|
+
if (part2.type === "literal") return;
|
|
637
616
|
const type = part2.type;
|
|
638
617
|
formats2[type] = Object.assign(formats2[type] || {}, {
|
|
639
618
|
[part2.value]: style
|
|
@@ -675,8 +654,7 @@ function format(inputDateOrOptions, format2 = "long", locale = "device", genitiv
|
|
|
675
654
|
tz
|
|
676
655
|
} = inputDateOrOptions);
|
|
677
656
|
}
|
|
678
|
-
if (format2 === "ISO8601")
|
|
679
|
-
return date(inputDateOrOptions).toISOString();
|
|
657
|
+
if (format2 === "ISO8601") return date(inputDateOrOptions).toISOString();
|
|
680
658
|
if (tz) {
|
|
681
659
|
forceOffset = offset(inputDateOrOptions, "utc", tz, getOffsetFormat(format2));
|
|
682
660
|
}
|
|
@@ -692,7 +670,7 @@ function format(inputDateOrOptions, format2 = "long", locale = "device", genitiv
|
|
|
692
670
|
}
|
|
693
671
|
return fill(
|
|
694
672
|
inputDateOrOptions,
|
|
695
|
-
parts(format2, locale).filter(partFilter != null ? partFilter : () => true),
|
|
673
|
+
parts(format2, locale).filter(partFilter != null ? partFilter : (() => true)),
|
|
696
674
|
locale,
|
|
697
675
|
genitive,
|
|
698
676
|
forceOffset
|
|
@@ -726,7 +704,7 @@ function hourEnd(inputDate) {
|
|
|
726
704
|
// src/hourStart.ts
|
|
727
705
|
function hourStart(inputDate) {
|
|
728
706
|
const d = date(inputDate);
|
|
729
|
-
d.setMinutes(0, 0);
|
|
707
|
+
d.setMinutes(0, 0, 0);
|
|
730
708
|
return d;
|
|
731
709
|
}
|
|
732
710
|
|
|
@@ -740,7 +718,7 @@ function minuteEnd(inputDate) {
|
|
|
740
718
|
// src/minuteStart.ts
|
|
741
719
|
function minuteStart(inputDate) {
|
|
742
720
|
const d = date(inputDate);
|
|
743
|
-
d.setSeconds(0);
|
|
721
|
+
d.setSeconds(0, 0);
|
|
744
722
|
return d;
|
|
745
723
|
}
|
|
746
724
|
|
|
@@ -748,7 +726,7 @@ function minuteStart(inputDate) {
|
|
|
748
726
|
function monthStart(inputDate) {
|
|
749
727
|
const d = date(inputDate);
|
|
750
728
|
d.setDate(1);
|
|
751
|
-
d.setHours(0, 0, 0);
|
|
729
|
+
d.setHours(0, 0, 0, 0);
|
|
752
730
|
return d;
|
|
753
731
|
}
|
|
754
732
|
|
|
@@ -784,13 +762,11 @@ function nearestDay(inputDate, search, constraint = 7) {
|
|
|
784
762
|
for (let i = 0; i <= increments || i < decrements; i++) {
|
|
785
763
|
if (i <= increments) {
|
|
786
764
|
const next = addDay(d, i);
|
|
787
|
-
if (search(next))
|
|
788
|
-
return next;
|
|
765
|
+
if (search(next)) return next;
|
|
789
766
|
}
|
|
790
767
|
if (i && i <= decrements) {
|
|
791
768
|
const prev = addDay(d, -i);
|
|
792
|
-
if (search(prev))
|
|
793
|
-
return prev;
|
|
769
|
+
if (search(prev)) return prev;
|
|
794
770
|
}
|
|
795
771
|
}
|
|
796
772
|
return null;
|
|
@@ -799,8 +775,7 @@ function nearestDay(inputDate, search, constraint = 7) {
|
|
|
799
775
|
// src/range.ts
|
|
800
776
|
function range(token, locale = "en", genitive = false) {
|
|
801
777
|
const r = (n, c) => Array(n).fill("").map((_, i) => `${c(i)}`);
|
|
802
|
-
if (token === "M")
|
|
803
|
-
return r(12, (i) => i + 1);
|
|
778
|
+
if (token === "M") return r(12, (i) => i + 1);
|
|
804
779
|
if (token === "MM")
|
|
805
780
|
return r(12, (i) => {
|
|
806
781
|
const m = i + 1;
|
|
@@ -858,19 +833,16 @@ function parse(dateStrOrOptions, format2 = "ISO8601", locale = "device") {
|
|
|
858
833
|
} else {
|
|
859
834
|
dateStr = dateStrOrOptions;
|
|
860
835
|
}
|
|
861
|
-
if (!dateStr)
|
|
862
|
-
throw new Error("parse() requires a date string.");
|
|
836
|
+
if (!dateStr) throw new Error("parse() requires a date string.");
|
|
863
837
|
const invalid = () => {
|
|
864
838
|
throw new Error(
|
|
865
839
|
`Date (${dateStr}) does not match format (${formatStr(format2, locale)})`
|
|
866
840
|
);
|
|
867
841
|
};
|
|
868
|
-
if (format2 === "ISO8601")
|
|
869
|
-
return date(dateStr);
|
|
842
|
+
if (format2 === "ISO8601") return date(dateStr);
|
|
870
843
|
const genitive = styles.includes(format2) || typeof format2 === "object";
|
|
871
844
|
const formatParts = validate(parts(format2, locale).filter(partFilter));
|
|
872
|
-
if (!formatParts.length)
|
|
873
|
-
throw new Error("parse() requires a pattern.");
|
|
845
|
+
if (!formatParts.length) throw new Error("parse() requires a pattern.");
|
|
874
846
|
let parsedParts;
|
|
875
847
|
try {
|
|
876
848
|
parsedParts = parseParts(dateStr, formatParts);
|
|
@@ -884,17 +856,19 @@ function parse(dateStrOrOptions, format2 = "ISO8601", locale = "device") {
|
|
|
884
856
|
["DD", now.getDate()],
|
|
885
857
|
["HH", 0],
|
|
886
858
|
["mm", 0],
|
|
887
|
-
["ss", 0]
|
|
859
|
+
["ss", 0],
|
|
860
|
+
["SSS", 0]
|
|
888
861
|
]);
|
|
889
862
|
let a = null;
|
|
890
863
|
let offset2 = "";
|
|
891
864
|
parsedParts.forEach((part) => {
|
|
892
|
-
if (part.partName === "literal")
|
|
893
|
-
|
|
894
|
-
if (part.token === part.value)
|
|
895
|
-
return invalid();
|
|
865
|
+
if (part.partName === "literal") return;
|
|
866
|
+
if (part.token === part.value) return invalid();
|
|
896
867
|
const v = Number(part.value);
|
|
897
|
-
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)) {
|
|
898
872
|
parsed.set(part.token, v);
|
|
899
873
|
} else if (part.token === "YY") {
|
|
900
874
|
parsed.set("YYYY", fourDigitYear(part.value));
|
|
@@ -934,17 +908,24 @@ function parse(dateStrOrOptions, format2 = "ISO8601", locale = "device") {
|
|
|
934
908
|
parsed.set("HH", 0);
|
|
935
909
|
}
|
|
936
910
|
parsed.set("MM", (parsed.get("MM") || 1) - 1);
|
|
937
|
-
let [Y, M, D, h, m, s] = Array.from(parsed.values());
|
|
911
|
+
let [Y, M, D, h, m, s, ms] = Array.from(parsed.values());
|
|
938
912
|
const maxDaysInMonth = monthDays(/* @__PURE__ */ new Date(`${four(Y)}-${two(M + 1)}-10`));
|
|
939
913
|
if (maxDaysInMonth < D && dateOverflow === "throw")
|
|
940
914
|
throw new Error(`Invalid date ${four(Y)}-${two(M + 1)}-${two(D)}`);
|
|
941
915
|
D = dateOverflow === "backward" ? Math.min(D, maxDaysInMonth) : D;
|
|
942
|
-
const
|
|
943
|
-
|
|
944
|
-
|
|
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}`;
|
|
945
927
|
const d = new Date(isoString);
|
|
946
|
-
if (isFinite(+d))
|
|
947
|
-
return d;
|
|
928
|
+
if (isFinite(+d)) return d;
|
|
948
929
|
return invalid();
|
|
949
930
|
}
|
|
950
931
|
function parseParts(dateStr, formatParts) {
|
|
@@ -964,13 +945,18 @@ function parseParts(dateStr, formatParts) {
|
|
|
964
945
|
len = current.partValue.length;
|
|
965
946
|
} else if (current.partName === "timeZoneName") {
|
|
966
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;
|
|
967
954
|
} else if (current.token in fixedLength) {
|
|
968
955
|
len = fixedLength[current.token];
|
|
969
956
|
} else if (next) {
|
|
970
957
|
if (next.partName === "literal") {
|
|
971
958
|
len = dateStr.indexOf(next.partValue, pos) - pos;
|
|
972
|
-
if (len < 0)
|
|
973
|
-
throw new Error();
|
|
959
|
+
if (len < 0) throw new Error();
|
|
974
960
|
} else if (next.partName === "dayPeriod") {
|
|
975
961
|
for (let i2 = 1; i2 <= 4; i2++) {
|
|
976
962
|
if (isNaN(Number(dateStr.charAt(pos + i2)))) {
|
|
@@ -980,8 +966,7 @@ function parseParts(dateStr, formatParts) {
|
|
|
980
966
|
}
|
|
981
967
|
} else {
|
|
982
968
|
const nextChar = dateStr.substring(pos).search(/\d/);
|
|
983
|
-
if (nextChar !== -1)
|
|
984
|
-
len = pos + nextChar;
|
|
969
|
+
if (nextChar !== -1) len = pos + nextChar;
|
|
985
970
|
}
|
|
986
971
|
} else {
|
|
987
972
|
len = dateStr.length;
|
|
@@ -1006,6 +991,13 @@ function sameSecond(inputDateA, inputDateB) {
|
|
|
1006
991
|
return a.getSeconds() === b.getSeconds();
|
|
1007
992
|
}
|
|
1008
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
|
+
|
|
1009
1001
|
// src/sameMinute.ts
|
|
1010
1002
|
function sameMinute(inputDateA, inputDateB) {
|
|
1011
1003
|
const a = date(inputDateA);
|
|
@@ -1031,10 +1023,9 @@ function sameYear(inputDateA, inputDateB) {
|
|
|
1031
1023
|
function weekStart(inputDate, startOfWeekDay = 0) {
|
|
1032
1024
|
const d = date(inputDate);
|
|
1033
1025
|
let diff = startOfWeekDay - d.getDay();
|
|
1034
|
-
if (diff > 0)
|
|
1035
|
-
diff = diff - 7;
|
|
1026
|
+
if (diff > 0) diff = diff - 7;
|
|
1036
1027
|
d.setDate(d.getDate() + diff);
|
|
1037
|
-
d.setHours(0, 0, 0);
|
|
1028
|
+
d.setHours(0, 0, 0, 0);
|
|
1038
1029
|
return d;
|
|
1039
1030
|
}
|
|
1040
1031
|
|
|
@@ -1042,24 +1033,22 @@ function weekStart(inputDate, startOfWeekDay = 0) {
|
|
|
1042
1033
|
function weekEnd(inputDate, startOfWeekDay = 0) {
|
|
1043
1034
|
const d = weekStart(inputDate, startOfWeekDay);
|
|
1044
1035
|
d.setDate(d.getDate() + 6);
|
|
1045
|
-
d.setHours(23, 59, 59);
|
|
1036
|
+
d.setHours(23, 59, 59, 999);
|
|
1046
1037
|
return d;
|
|
1047
1038
|
}
|
|
1048
1039
|
|
|
1049
1040
|
// src/yearStart.ts
|
|
1050
1041
|
function yearStart(inputDate) {
|
|
1051
1042
|
const d = date(inputDate);
|
|
1052
|
-
d.setMonth(0);
|
|
1053
|
-
d.
|
|
1054
|
-
d.setHours(0, 0, 0);
|
|
1043
|
+
d.setMonth(0, 1);
|
|
1044
|
+
d.setHours(0, 0, 0, 0);
|
|
1055
1045
|
return d;
|
|
1056
1046
|
}
|
|
1057
1047
|
|
|
1058
1048
|
// src/yearEnd.ts
|
|
1059
1049
|
function yearEnd(inputDate) {
|
|
1060
1050
|
const d = date(inputDate);
|
|
1061
|
-
d.setMonth(11);
|
|
1062
|
-
d.setDate(31);
|
|
1051
|
+
d.setMonth(11, 31);
|
|
1063
1052
|
d.setHours(23, 59, 59, 999);
|
|
1064
1053
|
return d;
|
|
1065
1054
|
}
|
|
@@ -1085,6 +1074,16 @@ function isEqual(dateLeft, dateRight) {
|
|
|
1085
1074
|
return +_dateLeft === +_dateRight;
|
|
1086
1075
|
}
|
|
1087
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
|
+
|
|
1088
1087
|
// src/diffMilliseconds.ts
|
|
1089
1088
|
function diffMilliseconds(dateA, dateB) {
|
|
1090
1089
|
const left = date(dateA);
|
|
@@ -1100,17 +1099,26 @@ function diffRound(value, method = "trunc") {
|
|
|
1100
1099
|
|
|
1101
1100
|
// src/diffSeconds.ts
|
|
1102
1101
|
function diffSeconds(dateA, dateB, roundingMethod) {
|
|
1103
|
-
return diffRound(
|
|
1102
|
+
return diffRound(
|
|
1103
|
+
// @ts-ignore
|
|
1104
|
+
diffMilliseconds(dateA, dateB) / 1e3,
|
|
1105
|
+
roundingMethod
|
|
1106
|
+
);
|
|
1104
1107
|
}
|
|
1105
1108
|
|
|
1106
1109
|
// src/diffMinutes.ts
|
|
1107
1110
|
function diffMinutes(dateA, dateB, roundingMethod) {
|
|
1108
|
-
return diffRound(
|
|
1111
|
+
return diffRound(
|
|
1112
|
+
//@ts-ignore
|
|
1113
|
+
diffMilliseconds(dateA, dateB) / 6e4,
|
|
1114
|
+
roundingMethod
|
|
1115
|
+
);
|
|
1109
1116
|
}
|
|
1110
1117
|
|
|
1111
1118
|
// src/diffHours.ts
|
|
1112
1119
|
function diffHours(dateA, dateB, roundingMethod) {
|
|
1113
1120
|
return diffRound(
|
|
1121
|
+
//@ts-ignore
|
|
1114
1122
|
diffMilliseconds(dateA, dateB) / 36e5,
|
|
1115
1123
|
// 1000 * 60 * 60
|
|
1116
1124
|
roundingMethod
|
|
@@ -1120,6 +1128,7 @@ function diffHours(dateA, dateB, roundingMethod) {
|
|
|
1120
1128
|
// src/diffDays.ts
|
|
1121
1129
|
function diffDays(dateA, dateB, roundingMethod) {
|
|
1122
1130
|
return diffRound(
|
|
1131
|
+
// @ts-ignore
|
|
1123
1132
|
diffMilliseconds(dateA, dateB) / 864e5,
|
|
1124
1133
|
// hour * 24
|
|
1125
1134
|
roundingMethod
|
|
@@ -1157,12 +1166,16 @@ function diffMonths(dateA, dateB) {
|
|
|
1157
1166
|
|
|
1158
1167
|
// src/diffYears.ts
|
|
1159
1168
|
function diffYears(dateA, dateB) {
|
|
1160
|
-
const r = Math.trunc(
|
|
1169
|
+
const r = Math.trunc(
|
|
1170
|
+
//@ts-ignore
|
|
1171
|
+
diffMonths(dateA, dateB) / 12
|
|
1172
|
+
);
|
|
1161
1173
|
return r == 0 ? 0 : r;
|
|
1162
1174
|
}
|
|
1163
1175
|
export {
|
|
1164
1176
|
addDay,
|
|
1165
1177
|
addHour,
|
|
1178
|
+
addMillisecond,
|
|
1166
1179
|
addMinute,
|
|
1167
1180
|
addMonth,
|
|
1168
1181
|
addSecond,
|
|
@@ -1189,6 +1202,8 @@ export {
|
|
|
1189
1202
|
isAfter,
|
|
1190
1203
|
isBefore,
|
|
1191
1204
|
isEqual,
|
|
1205
|
+
isFuture,
|
|
1206
|
+
isPast,
|
|
1192
1207
|
iso8601,
|
|
1193
1208
|
minuteEnd,
|
|
1194
1209
|
minuteStart,
|
|
@@ -1204,6 +1219,7 @@ export {
|
|
|
1204
1219
|
removeOffset,
|
|
1205
1220
|
sameDay,
|
|
1206
1221
|
sameHour,
|
|
1222
|
+
sameMillisecond,
|
|
1207
1223
|
sameMinute,
|
|
1208
1224
|
sameSecond,
|
|
1209
1225
|
sameYear,
|