@gae-labs/better-ms
v2.0.0
Published
Millisecond conversion tool with support for multiple time units in a single input string
Readme
BetterMsJs
Based on vercel/ms @ v2.1.3
Use this package to easily convert various time formats to milliseconds.
Comparison with ms
BetterMsJs is a fork of the original ms package. BetterMsJs implements the support for multiple time units in a single input string, such as 1d6h30m, and support for multiple units when formatting a human-readable string from milliseconds.
This allows for more flexibility in the input format. The original ms package only supports a single time unit in the input string, and rounds the output string to the nearest unit.
Breaking Changes compared to ms
- This package now returns a ms value on inputs like
1d 2h 3m 4sinstead ofNaN, this could be a breaking change if you were relying on the previous behavior. - This package now returns
NaNon inputs that contain multiple decimal points like1.2.3.4sinstead ofundefined, this could be a breaking change if you were relying on the previous behavior. - This package now accepts inputs greater than 100 characters, this could be a breaking change if you were relying on the previous behavior.
Installation
npm install @gae-labs/better-msUsage
const betterMs = require('@gae-labs/better-ms');
betterMs('2 days 6 hours 30 minutes 15 seconds') // 196215000
betterMs(196215000) // "2d 6h 30m 15s"Parse to Milliseconds
betterMs('2 days 6 hours 30 minutes 15 seconds') // 196215000
betterMs('1d 2h 3m 4s') // 93784000
betterMs('2 days') // 172800000
betterMs('1d') // 86400000
betterMs('10h') // 36000000
betterMs('2.5 hrs') // 9000000
betterMs('2h') // 7200000
betterMs('1m') // 60000
betterMs('5s') // 5000
betterMs('1y') // 31557600000
betterMs('100') // 100
betterMs('-3 days') // -259200000
betterMs('-1h') // -3600000
betterMs('-200') // -200Supported Units for Parsing
- Years:
y,yr,yrs,year,years - Months:
mo,mos,mth,mths,month,months - Weeks:
w,week,weeks - Days:
d,day,days - Hours:
h,hr,hrs,hour,hours - Minutes:
m,min,mins,minute,minutes - Seconds:
s,sec,secs,second,seconds - Milliseconds:
ms,msec,msecs,millisecond,milliseconds
Format to Human-Readable String
betterMs(60000) // "1m"
betterMs(1000 * 60 * 60 * 24) // "1d"
betterMs(betterMs('10 hours')) // "10h"
betterMs(1000 * 60 * 60 * 36) // "1d 12h"
betterMs(1000 * 60 * 60 * 36, { long: true }) // "1 day 12 hours"
betterMs(1000 * 60 * 60 * 36, { compact: true }) // "1d12h"
betterMs(1000 * 60 * 60 * 36, { extraSpace: true }) // "1 d 12 h"
betterMs(1000 * 60 * 60 * 36, { exclude: ['d'] }) // "36h"
betterMs(1000 * 60 * 60 * 36, { plural: false }) // "1 day 12 hour"
betterMs(1000 * 60 * 60 * 36, { short: true }) // "1d"
betterMs(1000 * 60 * 60 * 36, { object: true }) // { d: 1, h: 12 }
betterMs(1000 * 60 * 60 * 48, { minimum: 2 }) // "2d"
betterMs(1000 * 60 * 60 * 47, { minimum: 2 }) // "47h"Options for Formatting
longverbose formatting [false] (Example: 5 hours instead of 5h)compactcompact formatting [false] (Example: 5h30m instead of 5h 30m)extraSpaceadd extra space between value and unit [true with long and false when !long, unless specified] (Example: 5 h instead of 5h)excludearray of units to exclude [] (Acceptable Inputs: [y, M, w, d, h, m, s, ms])pluralpluralize unit [true] [only works with long] (Example: 2 years instead of 2 year)shortprovide only the most significant unit [false] (Example: 5h 30m 10s would be shown as 5h)minimumminimum amount of a unit required to include that unit [1] (Acceptable Inputs: >= 1) (Example: Input of 1h 30m - Minimum 1 = 1h 30m | Minimum 2 = 90m | Minimum 1.5 = 1h 30m)objectTo return an object with each unit and value [false] (Expected Output: { y: 1, M: 2, w: 3, d: 4, h: 5, m: 6, s: 7, ms: 8 })
Features
- Works both in Node.js and in the browser
- If a number is supplied to
ms, a string with a unit is returned - If a string that contains the number is supplied, it returns it as a number (e.g.: it returns
100for'100') - If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned
Caught a Bug?
- Fork this repository to your own GitHub account and then clone it to your local device
- Link the package to the global module directory:
npm link - Within the module you want to test your local development instance of ms, just link it to the dependencies:
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
