README.md

# ms

Tiny millisecond conversion utility, inspired by the npm [ms](https://www.npmjs.com/package/ms) package.

## Why

Elixir's `:timer` module works but only accepts numbers:

```elixir
:timer.hours(2)    #=> 7200000
:timer.minutes(30) #=> 1800000
```

`ms` lets you use human-readable strings, which is nicer for configs, timeouts, and user input:

```elixir
Ms.parse("2h")      #=> 7200000
Ms.parse("1h 30m")  #=> 5400000
Ms.parse("7 days")  #=> 604800000
```

## Installation

Add `ms` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:ms, "~> 1.0"}
  ]
end
```

## Usage

### Parsing

```elixir
Ms.parse("2h")      #=> 7200000
Ms.parse("1.5h")    #=> 5400000
Ms.parse("1h 30m")  #=> 5400000
Ms.parse("100")     #=> 100
Ms.parse("nope")    #=> :error
Ms.parse!("2h")     #=> 7200000
```

### Formatting

```elixir
Ms.format(7200000)              #=> "2h"
Ms.format(7200000, long: true)  #=> "2 hours"
Ms.format(60000)                #=> "1m"
```

### Supported units

| Unit         | Short | Aliases                         |
|--------------|-------|---------------------------------|
| milliseconds | ms    | ms, msec, msecs, millisecond(s) |
| seconds      | s     | s, sec, secs, second(s)         |
| minutes      | m     | m, min, mins, minute(s)         |
| hours        | h     | h, hr, hrs, hour(s)             |
| days         | d     | d, day(s)                       |
| weeks        | w     | w, wk, wks, week(s)            |
| months       | mo    | mo, month(s)                    |
| years        | y     | y, yr, yrs, year(s)             |