diff --git a/index.js b/index.js index fa41082..4b30f77 100644 --- a/index.js +++ b/index.js @@ -56,6 +56,20 @@ module.exports = (milliseconds, options = {}) => { } } + // Round up milliseconds for values lager than 1 minute - 50ms since these + // always need to be round up. + // (this fixes issues when rounding seconds independently of minutes later) + if ( + milliseconds >= (1000 * 60) - 50 && + !options.separateMilliseconds && + !options.formatSubMilliseconds + ) { + const difference = 60 - (milliseconds % 60); + if (difference <= 50) { + milliseconds += difference; + } + } + const parsed = parseMilliseconds(milliseconds); add(Math.trunc(parsed.days / 365), 'year', 'y'); @@ -84,9 +98,13 @@ module.exports = (milliseconds, options = {}) => { options.millisecondsDecimalDigits : 0; + const roundedMiliseconds = millisecondsAndBelow >= 1 ? + Math.round(millisecondsAndBelow) : + Math.ceil(millisecondsAndBelow); + const millisecondsString = millisecondsDecimalDigits ? millisecondsAndBelow.toFixed(millisecondsDecimalDigits) : - Math.ceil(millisecondsAndBelow); + roundedMiliseconds; add( parseFloat(millisecondsString, 10), diff --git a/test.js b/test.js index a217461..950009b 100644 --- a/test.js +++ b/test.js @@ -16,6 +16,7 @@ test('prettify milliseconds', t => { t.is(prettyMilliseconds(1000 * 60 * 60 * 999), '41d 15h'); t.is(prettyMilliseconds(1000 * 60 * 60 * 24 * 465), '1y 100d'); t.is(prettyMilliseconds(1000 * 60 * 67 * 24 * 465), '1y 154d 6h'); + t.is(prettyMilliseconds(119999), '2m'); }); test('have a compact option', t => { @@ -43,8 +44,8 @@ test('have a secondsDecimalDigits option', t => { }); test('have a millisecondsDecimalDigits option', t => { - t.is(prettyMilliseconds(33.333), '34ms'); - t.is(prettyMilliseconds(33.333, {millisecondsDecimalDigits: 0}), '34ms'); + t.is(prettyMilliseconds(33.333), '33ms'); + t.is(prettyMilliseconds(33.333, {millisecondsDecimalDigits: 0}), '33ms'); t.is(prettyMilliseconds(33.333, {millisecondsDecimalDigits: 4}), '33.3330ms'); });