intervalToDuration.cjs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. "use strict";
  2. exports.intervalToDuration = intervalToDuration;
  3. var _index = require("./_lib/normalizeInterval.cjs");
  4. var _index2 = require("./add.cjs");
  5. var _index3 = require("./differenceInDays.cjs");
  6. var _index4 = require("./differenceInHours.cjs");
  7. var _index5 = require("./differenceInMinutes.cjs");
  8. var _index6 = require("./differenceInMonths.cjs");
  9. var _index7 = require("./differenceInSeconds.cjs");
  10. var _index8 = require("./differenceInYears.cjs");
  11. /**
  12. * The {@link intervalToDuration} function options.
  13. */
  14. /**
  15. * @name intervalToDuration
  16. * @category Common Helpers
  17. * @summary Convert interval to duration
  18. *
  19. * @description
  20. * Convert an interval object to a duration object.
  21. *
  22. * @param interval - The interval to convert to duration
  23. * @param options - The context options
  24. *
  25. * @returns The duration object
  26. *
  27. * @example
  28. * // Get the duration between January 15, 1929 and April 4, 1968.
  29. * intervalToDuration({
  30. * start: new Date(1929, 0, 15, 12, 0, 0),
  31. * end: new Date(1968, 3, 4, 19, 5, 0)
  32. * });
  33. * //=> { years: 39, months: 2, days: 20, hours: 7, minutes: 5, seconds: 0 }
  34. */
  35. function intervalToDuration(interval, options) {
  36. const { start, end } = (0, _index.normalizeInterval)(options?.in, interval);
  37. const duration = {};
  38. const years = (0, _index8.differenceInYears)(end, start);
  39. if (years) duration.years = years;
  40. const remainingMonths = (0, _index2.add)(start, { years: duration.years });
  41. const months = (0, _index6.differenceInMonths)(end, remainingMonths);
  42. if (months) duration.months = months;
  43. const remainingDays = (0, _index2.add)(remainingMonths, {
  44. months: duration.months,
  45. });
  46. const days = (0, _index3.differenceInDays)(end, remainingDays);
  47. if (days) duration.days = days;
  48. const remainingHours = (0, _index2.add)(remainingDays, {
  49. days: duration.days,
  50. });
  51. const hours = (0, _index4.differenceInHours)(end, remainingHours);
  52. if (hours) duration.hours = hours;
  53. const remainingMinutes = (0, _index2.add)(remainingHours, {
  54. hours: duration.hours,
  55. });
  56. const minutes = (0, _index5.differenceInMinutes)(end, remainingMinutes);
  57. if (minutes) duration.minutes = minutes;
  58. const remainingSeconds = (0, _index2.add)(remainingMinutes, {
  59. minutes: duration.minutes,
  60. });
  61. const seconds = (0, _index7.differenceInSeconds)(end, remainingSeconds);
  62. if (seconds) duration.seconds = seconds;
  63. return duration;
  64. }