add metric number and handle infinity
This commit is contained in:
65
Humanize.js
65
Humanize.js
@@ -1,5 +1,21 @@
|
|||||||
|
export const number = (value) => value.toLocaleString();
|
||||||
|
export const metricNumber = value => {
|
||||||
|
let unitIndex = 0;
|
||||||
|
const units = ['', 'k', 'm', 'g', 't', 'p'];
|
||||||
|
|
||||||
|
while(value >= 1000) {
|
||||||
|
value /= 1000;
|
||||||
|
unitIndex++;
|
||||||
|
if(unitIndex === units.length - 1) break;
|
||||||
|
}
|
||||||
|
value = Math.floor(value * 10) * 0.1
|
||||||
|
return `${number(value)} ${units[unitIndex]}`
|
||||||
|
}
|
||||||
export function byteSize(count) {
|
export function byteSize(count) {
|
||||||
if(count === 0) return 'none';
|
if(count === 0) return 'none';
|
||||||
|
if(count === Infinity) return Infinity;
|
||||||
|
if(count === -Infinity) return -Infinity;
|
||||||
|
|
||||||
let unitIndex = 0;
|
let unitIndex = 0;
|
||||||
const units = ['bytes', 'kb', 'mb', 'gb', 'tb', 'pb'];
|
const units = ['bytes', 'kb', 'mb', 'gb', 'tb', 'pb'];
|
||||||
while(count > 999) {
|
while(count > 999) {
|
||||||
@@ -8,22 +24,18 @@ export function byteSize(count) {
|
|||||||
if(unitIndex === units.length - 1) break;
|
if(unitIndex === units.length - 1) break;
|
||||||
}
|
}
|
||||||
count = Math.floor(count * 10) * 0.1
|
count = Math.floor(count * 10) * 0.1
|
||||||
return `${count.toLocaleString()} ${units[unitIndex]}`
|
return `${number(count)} ${units[unitIndex]}`
|
||||||
}
|
}
|
||||||
export function hertz(hz) {
|
export function hertz(hz) {
|
||||||
if(hz === 0) return 'none';
|
if(hz === 0) return 'none';
|
||||||
let unitIndex = 0;
|
if(hz === Infinity) return Infinity;
|
||||||
const units = ['Hz', 'kHz', 'mHz', 'gHz', 'tHz', 'pHz'];
|
if(hz === -Infinity) return -Infinity;
|
||||||
while(hz >= 1000) {
|
return `${metricNumber(hz)}Hz`
|
||||||
hz /= 1000;
|
|
||||||
unitIndex++;
|
|
||||||
if(unitIndex === units.length - 1) break;
|
|
||||||
}
|
|
||||||
hz = Math.floor(hz * 1000) * 0.001
|
|
||||||
return `${hz.toLocaleString()} ${units[unitIndex]}`
|
|
||||||
}
|
}
|
||||||
export function bitsPerSecond(bps) {
|
export function bitsPerSecond(bps) {
|
||||||
if(bps === 0) return 'none';
|
if(bps === 0) return 'none';
|
||||||
|
if(bps === Infinity) return Infinity;
|
||||||
|
if(bps === -Infinity) return -Infinity;
|
||||||
let unitIndex = 0;
|
let unitIndex = 0;
|
||||||
const units = ['baud', 'Kbps', 'Mbps', 'Gbps', 'Tbps', 'Pbps'];
|
const units = ['baud', 'Kbps', 'Mbps', 'Gbps', 'Tbps', 'Pbps'];
|
||||||
while(bps > 999) {
|
while(bps > 999) {
|
||||||
@@ -32,21 +44,40 @@ export function bitsPerSecond(bps) {
|
|||||||
if(unitIndex === units.length - 1) break;
|
if(unitIndex === units.length - 1) break;
|
||||||
}
|
}
|
||||||
bps = Math.floor(bps * 10) * 0.1
|
bps = Math.floor(bps * 10) * 0.1
|
||||||
return `${bps.toLocaleString()} ${units[unitIndex]}`
|
return `${number(bps)} ${units[unitIndex]}`
|
||||||
}
|
}
|
||||||
export function durationMilliseconds(milliseconds) {
|
export function durationMilliseconds(milliseconds, long = false) {
|
||||||
if(milliseconds === 0) return 'none';
|
if(milliseconds === 0) return 'none';
|
||||||
const lookup = [
|
if(milliseconds === Infinity) return Infinity;
|
||||||
|
if(milliseconds === -Infinity) return -Infinity;
|
||||||
|
if(milliseconds !== Math.floor((milliseconds))) {
|
||||||
|
// TODO:
|
||||||
|
// 1000 ps (picoseconds) in a nanosecond
|
||||||
|
// 1000 ns (nanoseconds) in a microsecond
|
||||||
|
// 1000 µs (microseconds) in a millisecond
|
||||||
|
}
|
||||||
|
const lookup = long ? [
|
||||||
|
{mod: 1000, singular: 'milliseconds', plural: 'milliseconds'},
|
||||||
|
{mod: 60, singular: 'second', plural: 'seconds'},
|
||||||
|
{mod: 60, singular: 'minute', plural: 'minutes'},
|
||||||
|
{mod: 24, singular: 'hour', plural: 'hours'},
|
||||||
|
{mod: 7, singular: 'day', plural: 'days'},
|
||||||
|
{mod: 52.1785714, singular: 'week', plural: 'weeks'},
|
||||||
|
{mod: 10, singular: 'year', plural: 'years'},
|
||||||
|
{mod: 10, singular: 'decade', plural: 'decades'},
|
||||||
|
{mod: 10, singular: 'century', plural: 'centuries'},
|
||||||
|
{mod: 10, singular: 'millenium', plural: 'millennia'},
|
||||||
|
] : [
|
||||||
{mod: 1000, singular: 'ms', plural: 'ms'},
|
{mod: 1000, singular: 'ms', plural: 'ms'},
|
||||||
{mod: 60, singular: 's', plural: 's'},
|
{mod: 60, singular: 's', plural: 's'},
|
||||||
{mod: 60, singular: 'm', plural: 'm'},
|
{mod: 60, singular: 'm', plural: 'm'},
|
||||||
{mod: 24, singular: 'h', plural: 'h'},
|
{mod: 24, singular: 'h', plural: 'h'},
|
||||||
{mod: 7, singular: 'd', plural: 'd'},
|
{mod: 7, singular: 'd', plural: 'd'},
|
||||||
{mod: 53, singular: 'w', plural: 'w'},
|
{mod: 52.1785714, singular: 'w', plural: 'w'},
|
||||||
{mod: 10, singular: 'y', plural: 'y'},
|
{mod: 10, singular: 'y', plural: 'y'},
|
||||||
{mod: 10, singular: 'd', plural: 'd'},
|
{mod: 10, singular: 'dec', plural: 'dec'},
|
||||||
{mod: 10, singular: 'c', plural: 'c'},
|
{mod: 10, singular: 'c', plural: 'c'},
|
||||||
{mod: 10, singular: 'm', plural: 'm'},
|
{mod: 10, singular: 'mi', plural: 'mi'},
|
||||||
]
|
]
|
||||||
const units = [];
|
const units = [];
|
||||||
let remaining = Math.floor(milliseconds);
|
let remaining = Math.floor(milliseconds);
|
||||||
@@ -67,7 +98,7 @@ export function durationMilliseconds(milliseconds) {
|
|||||||
// drop values of zero
|
// drop values of zero
|
||||||
.filter(({value}) => value > 0)
|
.filter(({value}) => value > 0)
|
||||||
// humanize unit
|
// humanize unit
|
||||||
.map(({value, singular, plural}) => value + (value === 1 ? singular : plural))
|
.map(({value, singular, plural}) => number(value) + (value === 1 ? singular : plural))
|
||||||
// combine
|
// combine
|
||||||
.join(' ');
|
.join(' ');
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user