npm install ms
99.4
Supply Chain Risk
84.7
Quality
82.6
Maintenance
100
Vulnerability
5,095 Stars
163 Commits
262 Forks
84 Watching
7 Branches
106 Contributors
Updated on 03 Sept 2024
Minified
Minified + Gzipped
TypeScript (91.41%)
JavaScript (8.4%)
Shell (0.19%)
Cumulative downloads
Total Downloads
Last day
-3.4%
10,940,349
Compared to previous day
Last week
-0.6%
224,337,386
Compared to previous week
Last month
-6.3%
930,130,679
Compared to previous month
Last year
12.4%
11,132,697,404
Compared to previous year
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') // -200
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"
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, { 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, { 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
Reason
license file detected
Details
Reason
no binaries found in the repo
Reason
no dangerous workflow patterns detected
Reason
security policy file detected
Details
Reason
Found 19/29 approved changesets -- score normalized to 6
Reason
8 existing vulnerabilities detected
Details
Reason
1 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
detected GitHub workflow tokens with excessive permissions
Details
Reason
dependency not pinned by hash detected -- score normalized to 0
Details
Reason
project is not fuzzed
Details
Reason
SAST tool is not run on all commits -- score normalized to 0
Details
Score
Last Scanned on 2024-08-26
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More