UNPKG

3.69 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5var slicedToArray = require('./slicedToArray-0711941d.js');
6require('./unsupportedIterableToArray-68db1d3b.js');
7require('./_commonjsHelpers-72d386ba.js');
8var dayjs_min = require('./dayjs.min-e07657bf.js');
9
10var UNITS = [['years', 'year'], ['months', 'month'], ['days', 'day'], ['hours', 'hour'], ['minutes', 'minute'], ['seconds', 'second']];
11var DEFAULT_UNITS = ['years', 'months', 'days', 'hours', 'minutes', 'seconds']; // Return the difference between two dates, per unit.
12// Set `units` to get specific units only, e.g. ['minutes', 'seconds']
13// If `units` is not set, all the units are enabled.
14
15var difference = function difference(date1, date2) {
16 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
17 var units = options.units || DEFAULT_UNITS;
18 var maxUnits = options.maxUnits || -1;
19 var keepLeadingZeros = maxUnits === -1 && options.keepLeadingZeros || false;
20 var start = date2 > date1 ? date1 : date2;
21
22 var getRightMostUnitIndex = function getRightMostUnitIndex() {
23 return [].concat(UNITS).reverse().find(function (_ref) {
24 var _ref2 = slicedToArray._slicedToArray(_ref, 1),
25 unit = _ref2[0];
26
27 return units.includes(unit);
28 })[0];
29 };
30
31 return UNITS.reduce(function (result, _ref3, index) {
32 var _ref4 = slicedToArray._slicedToArray(_ref3, 2),
33 name = _ref4[0],
34 unitName = _ref4[1];
35
36 result[name] = null; // fill the current unit, subtract the difference from the remaining
37
38 if ((maxUnits === -1 || result.remainingUnits > 0) && units.includes(name)) {
39 result[name] = result.remaining.diff(start, unitName);
40 result.remaining = result.remaining.subtract(result[name], unitName);
41 } // remove leading zeros
42
43
44 if (!keepLeadingZeros && !result.seenNonZero) {
45 if (result[name] === 0) {
46 result[name] = null;
47 } else {
48 result.seenNonZero = true;
49 }
50 } // enforce the maxUnits option
51
52
53 if (result.remainingUnits > 0 && result.seenNonZero) {
54 result.remainingUnits -= 1;
55 } // last iteration
56
57
58 if (index === UNITS.length - 1) {
59 delete result.remaining;
60 delete result.remainingUnits;
61 delete result.seenNonZero; // include at least one 0
62
63 if (Object.values(result).every(function (val) {
64 return val === null;
65 })) {
66 result[getRightMostUnitIndex()] = 0;
67 }
68 }
69
70 return result;
71 }, {
72 remaining: dayjs_min.dayjs(start === date1 ? date2 : date1),
73 remainingUnits: maxUnits,
74 seenNonZero: false
75 });
76};
77var eachDayOfInterval = function eachDayOfInterval() {
78 var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
79 start = _ref5.start,
80 end = _ref5.end;
81
82 var startDate = dayjs_min.dayjs(start);
83 var endDate = dayjs_min.dayjs(end);
84
85 if (!startDate.isValid()) {
86 throw new Error('Start date of interval is invalid');
87 }
88
89 if (!endDate.isValid()) {
90 throw new Error('End date of interval is invalid');
91 }
92
93 startDate = startDate.startOf('day');
94 endDate = endDate.startOf('day');
95
96 if (startDate.isAfter(endDate)) {
97 throw new Error('Start date of interval is after end date');
98 }
99
100 var interval = [];
101
102 while (!startDate.isAfter(endDate)) {
103 interval.push(startDate.toDate());
104 startDate = startDate.add(1, 'day');
105 }
106
107 return interval;
108};
109var formatHtmlDatetime = function formatHtmlDatetime(date) {
110 return dayjs_min.dayjs(date).toISOString();
111};
112
113exports.difference = difference;
114exports.eachDayOfInterval = eachDayOfInterval;
115exports.formatHtmlDatetime = formatHtmlDatetime;
116//# sourceMappingURL=date.js.map