summaryrefslogtreecommitdiff
path: root/date-fns/src/formatISODuration/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'date-fns/src/formatISODuration/index.js')
-rw-r--r--date-fns/src/formatISODuration/index.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/date-fns/src/formatISODuration/index.js b/date-fns/src/formatISODuration/index.js
new file mode 100644
index 0000000..0702457
--- /dev/null
+++ b/date-fns/src/formatISODuration/index.js
@@ -0,0 +1,46 @@
+import requiredArgs from '../_lib/requiredArgs/index'
+
+/**
+ * @name formatISODuration
+ * @category Common Helpers
+ * @summary Format a duration object according as ISO 8601 duration string
+ *
+ * @description
+ * Format a duration object according to the ISO 8601 duration standard (https://www.digi.com/resources/documentation/digidocs/90001437-13/reference/r_iso_8601_duration_format.htm)
+ *
+ * @param {Duration} duration - the duration to format
+ *
+ * @returns {String} The ISO 8601 duration string
+ * @throws {TypeError} Requires 1 argument
+ * @throws {Error} Argument must be an object
+ *
+ * @example
+ * // Format the given duration as ISO 8601 string
+ * formatISODuration({
+ * years: 39,
+ * months: 2,
+ * days: 20,
+ * hours: 7,
+ * minutes: 5,
+ * seconds: 0
+ * })
+ * //=> 'P39Y2M20DT0H0M0S'
+ */
+
+export default function formatISODuration(duration) {
+ requiredArgs(1, arguments)
+
+ if (typeof duration !== 'object')
+ throw new Error('Duration must be an object')
+
+ const {
+ years = 0,
+ months = 0,
+ days = 0,
+ hours = 0,
+ minutes = 0,
+ seconds = 0
+ } = duration
+
+ return `P${years}Y${months}M${days}DT${hours}H${minutes}M${seconds}S`
+}