UNPKG

2.47 kBJavaScriptView Raw
1"use strict";
2exports.intervalToDuration = intervalToDuration;
3var _index = require("./add.js");
4var _index2 = require("./differenceInDays.js");
5var _index3 = require("./differenceInHours.js");
6var _index4 = require("./differenceInMinutes.js");
7var _index5 = require("./differenceInMonths.js");
8var _index6 = require("./differenceInSeconds.js");
9var _index7 = require("./differenceInYears.js");
10var _index8 = require("./toDate.js");
11
12/**
13 * @name intervalToDuration
14 * @category Common Helpers
15 * @summary Convert interval to duration
16 *
17 * @description
18 * Convert a interval object to a duration object.
19 *
20 * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
21 *
22 * @param interval - The interval to convert to duration
23 *
24 * @returns The duration object
25 *
26 * @example
27 * // Get the duration between January 15, 1929 and April 4, 1968.
28 * intervalToDuration({
29 * start: new Date(1929, 0, 15, 12, 0, 0),
30 * end: new Date(1968, 3, 4, 19, 5, 0)
31 * })
32 * // => { years: 39, months: 2, days: 20, hours: 7, minutes: 5, seconds: 0 }
33 */
34function intervalToDuration(interval) {
35 const start = (0, _index8.toDate)(interval.start);
36 const end = (0, _index8.toDate)(interval.end);
37
38 const duration = {};
39
40 const years = (0, _index7.differenceInYears)(end, start);
41 if (years) duration.years = years;
42
43 const remainingMonths = (0, _index.add)(start, { years: duration.years });
44
45 const months = (0, _index5.differenceInMonths)(end, remainingMonths);
46 if (months) duration.months = months;
47
48 const remainingDays = (0, _index.add)(remainingMonths, {
49 months: duration.months,
50 });
51
52 const days = (0, _index2.differenceInDays)(end, remainingDays);
53 if (days) duration.days = days;
54
55 const remainingHours = (0, _index.add)(remainingDays, {
56 days: duration.days,
57 });
58
59 const hours = (0, _index3.differenceInHours)(end, remainingHours);
60 if (hours) duration.hours = hours;
61
62 const remainingMinutes = (0, _index.add)(remainingHours, {
63 hours: duration.hours,
64 });
65
66 const minutes = (0, _index4.differenceInMinutes)(end, remainingMinutes);
67 if (minutes) duration.minutes = minutes;
68
69 const remainingSeconds = (0, _index.add)(remainingMinutes, {
70 minutes: duration.minutes,
71 });
72
73 const seconds = (0, _index6.differenceInSeconds)(end, remainingSeconds);
74 if (seconds) duration.seconds = seconds;
75
76 return duration;
77}