Duration
Duration module: time span representation and arithmetic.
Duration is stored internally as a whole number of milliseconds (Int). This makes arithmetic exact and interoperable with timestamps.
Construction helpers: Duration.milliseconds(n) Duration.seconds(n) Duration.minutes(n) Duration.hours(n) Duration.days(n) Duration.weeks(n)
Or use Duration.new/2 with a unit atom: :ms :s :m :h :d :w
Negative durations are supported (e.g. for countdown timers). Duration.format/1 handles negatives by prepending "-" (the smallest Int included: its magnitude is formatted without negating it).
Types
Functions
Add two durations.
march> Duration.add(Duration.seconds(30), Duration.seconds(30)) -- 1 minute
Duration(60000)Compare two durations.
Returns -1 if a < b, 0 if a == b, 1 if a > b.
march> Duration.compare(Duration.seconds(10), Duration.minutes(1))
-1
march> Duration.compare(Duration.hours(1), Duration.hours(1))
0
march> Duration.compare(Duration.days(1), Duration.hours(12))
1Create a Duration of n days (24-hour days, n * 86400000 milliseconds).
Examples
march> Duration.format(Duration.days(3))
"3 days"Format a Duration as a human-readable string.
march> Duration.format(Duration.seconds(90))
"1 minute, 30 seconds"
march> Duration.format(Duration.hours(2))
"2 hours"
march> Duration.format(Duration.milliseconds(500))
"500 milliseconds"
march> Duration.format(Duration.new(0, :ms))
"0 milliseconds"
march> Duration.format(Duration.seconds(-70))
"-1 minute, 10 seconds"Units shown (from largest to smallest): weeks, days, hours, minutes, seconds, milliseconds. Zero-valued units are omitted. Singular forms are used when the count is 1. A negative duration is - followed by its magnitude; this holds for every Int, the smallest included.
Create a Duration of n hours (stored as n * 3600000 milliseconds).
Examples
march> Duration.to_milliseconds(Duration.hours(1))
3600000Create a Duration of n milliseconds. n may be negative.
Examples
march> Duration.milliseconds(1500)
Duration(1500)
march> Duration.format(Duration.milliseconds(-250))
"-250 milliseconds"Create a Duration of n minutes (stored as n * 60000 milliseconds).
Examples
march> Duration.minutes(90) == Duration.add(Duration.hours(1), Duration.minutes(30))
trueMultiply a duration by an integer factor.
march> Duration.multiply(Duration.seconds(10), 6)
Duration(60000)
march> Duration.multiply(Duration.hours(1), 24) == Duration.days(1)
trueCreate a Duration from an amount and a unit atom.
Supported units: :ms (milliseconds), :s (seconds), :m (minutes), :h (hours), :d (days), :w (weeks). Any other atom is a match failure at runtime.
march> Duration.new(30, :s) -- 30 seconds
Duration(30000)
march> Duration.new(2, :h) -- 2 hours
Duration(7200000)
march> Duration.new(500, :ms) -- 500 milliseconds
Duration(500)Create a Duration of n seconds (stored as n * 1000 milliseconds).
Examples
march> Duration.seconds(2)
Duration(2000)
march> Duration.seconds(-1)
Duration(-1000)Subtract duration b from duration a.
march> Duration.subtract(Duration.hours(2), Duration.minutes(30)) -- 1 hour 30 minutes
Duration(5400000)Return the duration as a whole number of milliseconds.
march> Duration.to_milliseconds(Duration.seconds(2))
2000
march> Duration.to_milliseconds(Duration.minutes(1))
60000Return the duration as a floating-point number of seconds.
march> Duration.to_seconds(Duration.milliseconds(1500))
1.5
march> Duration.to_seconds(Duration.minutes(1)) == 60.0
true