123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- const toZeroIfInfinity = value => Number.isFinite(value) ? value : 0;
- function parseNumber(milliseconds) {
- return {
- days: Math.trunc(milliseconds / 86_400_000),
- hours: Math.trunc(milliseconds / 3_600_000 % 24),
- minutes: Math.trunc(milliseconds / 60_000 % 60),
- seconds: Math.trunc(milliseconds / 1000 % 60),
- milliseconds: Math.trunc(milliseconds % 1000),
- microseconds: Math.trunc(toZeroIfInfinity(milliseconds * 1000) % 1000),
- nanoseconds: Math.trunc(toZeroIfInfinity(milliseconds * 1e6) % 1000),
- };
- }
- function parseBigint(milliseconds) {
- return {
- days: milliseconds / 86_400_000n,
- hours: milliseconds / 3_600_000n % 24n,
- minutes: milliseconds / 60_000n % 60n,
- seconds: milliseconds / 1000n % 60n,
- milliseconds: milliseconds % 1000n,
- microseconds: 0n,
- nanoseconds: 0n,
- };
- }
- export default function parseMilliseconds(milliseconds) {
- switch (typeof milliseconds) {
- case 'number': {
- if (Number.isFinite(milliseconds)) {
- return parseNumber(milliseconds);
- }
- break;
- }
- case 'bigint': {
- return parseBigint(milliseconds);
- }
- // No default
- }
- throw new TypeError('Expected a finite number or bigint');
- }
|