UNPKG

@samual/duration

Version:

Normalize and format durations of time.

33 lines (32 loc) 1.62 kB
import { DurationError } from "./DurationError.js" class NormalizeDurationError extends DurationError {} Object.defineProperty(NormalizeDurationError.prototype, "name", { value: "NormalizeDurationError" }) class NormalizeNonIntegerDurationError extends NormalizeDurationError {} Object.defineProperty(NormalizeNonIntegerDurationError.prototype, "name", { value: "NormalizeDurationNonIntegerError" }) function normalizeDuration(duration) { if (Object.values(duration).some(value => value && !Number.isInteger(value))) throw new NormalizeNonIntegerDurationError("Given number must be an integer") let milliseconds = duration.milliseconds ?? 0, seconds = duration.seconds ?? 0, minutes = duration.minutes ?? 0, hours = duration.hours ?? 0, days = duration.days ?? 0, years = duration.years ?? 0 seconds += Math.floor(milliseconds / 1e3) milliseconds %= 1e3 minutes += Math.floor(seconds / 60) seconds %= 60 hours += Math.floor(minutes / 60) minutes %= 60 days += Math.floor(hours / 24) hours %= 24 years += Math.floor(days / 365) days %= 365 null != duration.years ? (duration.years = years) : (days += 365 * years) null != duration.days ? (duration.days = days) : (hours += 24 * days) null != duration.hours ? (duration.hours = hours) : (minutes += 60 * hours) null != duration.minutes ? (duration.minutes = minutes) : (seconds += 60 * minutes) null != duration.seconds ? (duration.seconds = seconds) : (milliseconds += 1e3 * seconds) null != duration.milliseconds && (duration.milliseconds = milliseconds) } export { NormalizeDurationError, NormalizeNonIntegerDurationError, normalizeDuration }