Use this package to easily convert various time formats to milliseconds.
ms('2 days') // 172800000 ms('1d') // 86400000 ms('10h') // 36000000 ms('2.5 hrs') // 9000000 ms('2h') // 7200000 ms('1m') // 60000 ms('5s') // 5000 ms('1y') // 31557600000 ms('100') // 100 ms('-3 days') // -259200000 ms('-1h') // -3600000 ms('-200') // -200Convert from Milliseconds
ms(60000) // "1m" ms(2 * 60000) // "2m" ms(-3 * 60000) // "-3m" ms(ms('10 hours')) // "10h"
ms(60000, { long: true }) // "1 minute" ms(2 * 60000, { long: true }) // "2 minutes" ms(-3 * 60000, { long: true }) // "-3 minutes" ms(ms('10 hours'), { long: true }) // "10 hours"
type Years = 'years' | 'year' | 'yrs' | 'yr' | 'y' type Weeks = 'weeks' | 'week' | 'w' type Days = 'days' | 'day' | 'd' type Hours = 'hours' | 'hour' | 'hrs' | 'hr' | 'h' type Minutes = 'minutes' | 'minute' | 'mins' | 'min' | 'm' type Seconds = 'seconds' | 'second' | 'secs' | 'sec' | 's' type Milliseconds = 'milliseconds' | 'millisecond' | 'msecs' | 'msec' | 'ms' type Unit = Years | Weeks | Days | Hours | Minutes | Seconds | Milliseconds
These formats can be lowercase (minutes
), uppercase (MINUTES
), or capitalized (Minutes
). There can be a space (2 minutes
) or not (2minutes
).
Note
The casing and spacing is enforced at a type level if you use parseStrict
.
If no unit is passed (2
), the unit will default to Milliseconds
. Fractional input values like 0.5m
, -0.5m
, .5m
, and -.5m
are supported.
You can install this package using a package manager like npm, yarn, pnpm, deno, or bun.
npm install ms yarn add ms pnpm add ms deno add npm:ms bun add ms
ms
, a string with a unit is returned100
for '100'
)As of v3.0
, this package includes TypeScript definitions.
For added safety, we're using Template Literal Types (added in TypeScript 4.1). This ensures that you don't accidentally pass ms
values that it can't process.
This won't require you to do anything special in most situations, but you can also import the StringValue
type from ms
if you need to use it.
import { ms, type StringValue } from 'ms'; // Using the exported type. function example(value: StringValue) { ms(value); } // This function will only accept a string compatible with `ms`. example('1 h');
In this example, we use a Type Assertion to coerce a string
.
import { ms, type StringValue } from 'ms'; // Type assertion with the exported type. function example(value: string) { try { // A string could be "wider" than the values accepted by `ms`, so we assert // that our `value` is a `StringValue`. // // It's important to note that this can be dangerous (see below). ms(value as StringValue); } catch (error: Error) { // Handle any errors from invalid values. console.error(error); } } // This function will accept any string, which may result in a bug. example('any value');
You may also create a custom Template Literal Type.
import { ms } from 'ms'; type OnlyDaysAndWeeks = `${number} ${'days' | 'weeks'}`; // Using a custom Template Literal Type. function example(value: OnlyDaysAndWeeks) { // The type of `value` is narrower than the values `ms` accepts, which is // safe to use without coercion. ms(value); } // This function will accept "# days" or "# weeks" only. example('5.2 days');
As of v3.0
, you can import parse
and format
separately.
import { parse, format } from 'ms'; parse('1h'); // 3600000 format(2000); // "2s"
If you want strict type checking for the input value, you can use parseStrict
.
import { parseStrict } from 'ms'; parseStrict('1h'); // 3600000 function example(s: string) { return parseStrict(str); // tsc error }
ms
is compatible with the Edge Runtime. It can be used inside environments like Vercel Edge Functions as follows:
// Next.js (pages/api/edge.js) (npm i next@canary) // Other frameworks (api/edge.js) (npm i -g vercel@canary) import { ms } from 'ms'; const start = Date.now(); export default (req) => { return new Response(`Alive since ${ms(Date.now() - start)}`); }; export const config = { runtime: 'experimental-edge', };
ms
as a macro at build-time.npm link
npm link ms
. Instead of the default one from npm, Node.js will now use your clone of ms!As always, you can run the tests using: npm test
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4