2017-04-22 15:07:52 +02:00
# timestring
2012-12-15 23:37:13 +01:00
2015-08-12 16:37:58 +02:00
[![Version ](https://img.shields.io/npm/v/timestring.svg?style=flat-square )](https://www.npmjs.com/package/timestring)
2020-05-16 16:45:09 +02:00
[![Build Status ](https://img.shields.io/github/workflow/status/mike182uk/timestring/CI/master?style=flat-square )](https://github.com/mike182uk/timestring/actions?query=workflow%3ACI)
2015-05-05 12:39:03 +02:00
[![Coveralls ](https://img.shields.io/coveralls/mike182uk/timestring/master.svg?style=flat-square )](https://coveralls.io/r/mike182uk/timestring)
2015-05-02 21:49:19 +02:00
[![npm ](https://img.shields.io/npm/dm/timestring.svg?style=flat-square )](https://www.npmjs.com/package/timestring)
[![License ](https://img.shields.io/github/license/mike182uk/timestring.svg?style=flat-square )](https://www.npmjs.com/package/timestring)
2014-07-18 22:14:09 +02:00
2015-05-02 21:49:19 +02:00
Parse a human readable time string into a time based value.
2012-12-15 23:37:13 +01:00
2015-11-11 13:14:54 +01:00
## Installation
2015-11-11 13:21:02 +01:00
```bash
npm install --save timestring
```
2015-11-11 13:14:54 +01:00
## Usage
### Overview
2012-12-15 23:37:13 +01:00
```js
2017-04-22 15:07:52 +02:00
const timestring = require('timestring')
2016-01-15 21:05:30 +01:00
2017-04-22 15:07:52 +02:00
let str = '1h 15m'
let time = timestring(str)
2012-12-15 23:37:13 +01:00
2016-12-16 20:52:21 +01:00
console.log(time) // will log 4500
2012-12-15 23:37:13 +01:00
```
2016-01-15 21:05:30 +01:00
**By default the returned time value from `timestring` will be in seconds.**
2012-12-15 23:37:13 +01:00
The time string can contain as many time groups as needed:
```js
2017-04-22 15:07:52 +02:00
const timestring = require('timestring')
let str = '1d 3h 25m 18s'
let time = timestring(str)
2012-12-15 23:37:13 +01:00
2016-12-16 20:52:21 +01:00
console.log(time) // will log 98718
2012-12-15 23:37:13 +01:00
```
and can be as messy as you like:
```js
2017-04-22 15:07:52 +02:00
const timestring = require('timestring')
let str = '1 d 3HOurS 25 min 1 8s'
let time = timestring(str)
2012-12-15 23:37:13 +01:00
2016-12-16 20:52:21 +01:00
console.log(time) // will log 98718
2012-12-15 23:37:13 +01:00
```
2015-11-11 13:14:54 +01:00
### Keywords
2012-12-15 23:37:13 +01:00
2017-04-22 15:07:52 +02:00
`timestring` will parse the following keywords into time values:
2012-12-15 23:37:13 +01:00
2016-07-30 17:03:48 +02:00
1. `ms, milli, millisecond, milliseconds` - will parse to milliseconds
2. `s, sec, secs, second, seconds` - will parse to seconds
3. `m, min, mins, minute, minutes` - will parse to minutes
4. `h, hr, hrs, hour, hours` - will parse to hours
5. `d, day, days` - will parse to days
6. `w, week, weeks` - will parse to weeks
2022-07-17 14:25:05 +02:00
7. `mo, mon, mth, mths, month, months` - will parse to months
2016-07-30 17:03:48 +02:00
8. `y, yr, yrs, year, years` - will parse to years
2012-12-15 23:37:13 +01:00
Keywords can be used interchangeably:
```js
2017-04-22 15:07:52 +02:00
const timestring = require('timestring')
let str = '1day 15h 20minutes 15s'
let time = timestring(str)
2012-12-15 23:37:13 +01:00
2016-12-16 20:52:21 +01:00
console.log(time) // will log 141615
2012-12-15 23:37:13 +01:00
```
2015-11-11 13:14:54 +01:00
### Return Time Value
2012-12-15 23:37:13 +01:00
2016-01-15 21:05:30 +01:00
By default the return time value will be in seconds. This can be changed by passing one of the following strings as an argument to `timestring` :
2012-12-15 23:37:13 +01:00
2016-07-30 17:03:48 +02:00
1. `ms` - Milliseconds
2. `s` - Seconds
3. `m` - Minutes
4. `h` - Hours
5. `d` - Days
6. `w` - Weeks
7. `mth` - Months
8. `y` - Years
2012-12-15 23:37:13 +01:00
```js
2017-04-22 15:07:52 +02:00
const timestring = require('timestring')
let str = '22h 16m'
2012-12-15 23:37:13 +01:00
2017-04-22 15:07:52 +02:00
let hours = timestring(str, 'h')
let days = timestring(str, 'd')
let weeks = timestring(str, 'w')
console.log(hours) // will log 22.266666666666666
console.log(days) // will log 0.9277777777777778
console.log(weeks) // will log 0.13253968253968254
2012-12-15 23:37:13 +01:00
```
2015-11-11 13:14:54 +01:00
### Optional Configuration
2012-12-15 23:37:13 +01:00
2012-12-24 14:29:05 +01:00
A few assumptions are made by default:
2012-12-15 23:37:13 +01:00
1. There are 24 hours per day
2. There are 7 days per week
3. There are 4 weeks per month
4. There are 12 months per year
2017-07-25 23:29:35 +02:00
5. There are 365.25 days per year
2012-12-15 23:37:13 +01:00
2016-01-15 21:05:30 +01:00
These options can be changed by passing an options object as an argument to `timestring` .
2012-12-15 23:37:13 +01:00
2016-01-15 12:00:03 +01:00
The following options are configurable:
2012-12-15 23:37:13 +01:00
1. `hoursPerDay`
2. `daysPerWeek`
3. `weeksPerMonth`
4. `monthsPerYear`
2017-07-25 23:29:35 +02:00
5. `daysPerYear`
2012-12-15 23:37:13 +01:00
```js
2017-04-22 15:07:52 +02:00
const timestring = require('timestring')
let str = '1d'
let opts = {
hoursPerDay: 1
2012-12-15 23:37:13 +01:00
}
2017-04-22 15:07:52 +02:00
let time = timestring(str, 'h', opts)
2012-12-15 23:37:13 +01:00
2016-12-16 20:52:21 +01:00
console.log(time) // will log 1
2012-12-15 23:37:13 +01:00
```
2016-01-15 12:00:03 +01:00
In the example above `hoursPerDay` is being set to `1` . When the time string is being parsed, the return value is being specified as hours. Normally `1d` would parse to `24` hours (as by default there are 24 hours in a day) but because `hoursPerDay` has been set to `1` , `1d` will now only parse to `1` hour.
2012-12-15 23:37:13 +01:00
2012-12-22 18:17:43 +01:00
This would be useful for specific application needs.
2012-12-15 23:37:13 +01:00
2017-07-25 23:29:35 +02:00
*Example - Employees of my company work 7.5 hours a day, and only work 5 days a week. In my time tracking app, when they type `1d` i want 7.5 hours to be tracked. When they type `1w` i want 5 days to be tracked etc.*
2012-12-15 23:37:13 +01:00
```js
2017-04-22 15:07:52 +02:00
const timestring = require('timestring')
let opts = {
hoursPerDay: 7.5,
daysPerWeek: 5
2012-12-15 23:37:13 +01:00
}
2017-04-22 15:07:52 +02:00
let hoursToday = timestring('1d', 'h', opts)
let daysThisWeek = timestring('1w', 'd', opts)
2012-12-15 23:37:13 +01:00
2016-12-16 20:52:21 +01:00
console.log(hoursToday) // will log 7.5
console.log(daysThisWeek) // will log 5
2012-12-22 18:17:43 +01:00
```
2017-07-25 23:29:35 +02:00
It is important to note that the `daysPerYear` configuration option will be used to convert a month or year to seconds, so if you are using custom configuration options make sure that you adjust this value to suit if you expect to be parsing timestrings containing months or years.
2019-05-04 21:26:45 +02:00
## Notes
If the string that is passed into `timestring` can not be parsed then an error will be thrown:
```js
const timestring = require('timestring')
let str = 'aaabbbccc'
let time = timestring(str) // will throw an error
```