UNPKG

@bitblit/ratchet-common

Version:

Common tools for general use

58 lines 2.51 kB
import { DateTime } from 'luxon'; import { NumberRatchet } from './number-ratchet.js'; export class DurationRatchet { static thinFormatMsDuration(ms, includeMS = false) { const rem_ms = Math.floor(ms % 1000); const seconds = Math.floor(ms / 1000) % 60; const minutes = Math.floor(ms / (1000 * 60)) % 60; const hours = Math.floor(ms / (1000 * 60 * 60)) % 24; const days = Math.floor(ms / (1000 * 60 * 60 * 24)); const f = NumberRatchet.leadingZeros; let rval = hours > 0 ? f(hours, 2) + 'h' : ''; rval += minutes > 0 ? f(minutes, 2) + 'm' : ''; rval += includeMS ? f(seconds, 2) + '.' + f(rem_ms, 3) + 's' : f(seconds, 2) + 's'; if (days > 0) { rval = days + 'd' + rval; } return rval; } static formatMsDuration(ms, includeMS = false) { const rem_ms = Math.floor(ms % 1000); const seconds = Math.floor(ms / 1000) % 60; const minutes = Math.floor(ms / (1000 * 60)) % 60; const hours = Math.floor(ms / (1000 * 60 * 60)) % 24; const days = Math.floor(ms / (1000 * 60 * 60 * 24)); const f = NumberRatchet.leadingZeros; let rval = f(hours, 2) + 'h' + f(minutes, 2) + 'm'; rval += includeMS ? f(seconds, 2) + '.' + f(rem_ms, 3) + 's' : f(seconds, 2) + 's'; if (days > 0) { rval = days + 'd' + rval; } return rval; } static colonFormatMsDuration(ms, includeMS = false) { const rem_ms = ms % 1000; const seconds = Math.floor(ms / 1000) % 60; const minutes = Math.floor(ms / (1000 * 60)) % 60; const hours = Math.floor(ms / (1000 * 60 * 60)); const f = NumberRatchet.leadingZeros; let rval = f(hours, 2) + ':' + f(minutes, 2) + ':'; rval += includeMS ? f(seconds, 2) + '.' + f(rem_ms, 3) : f(seconds, 2); return rval; } static daysBetween(d1, d2) { const dur = DateTime.fromJSDate(d1).diff(DateTime.fromJSDate(d2)); return dur.days; } static createSteps(startEpochMS, endEpochMS, timezone, outputFormat, stepUnit) { let curDate = DateTime.fromMillis(startEpochMS).setZone(timezone); const endDate = DateTime.fromMillis(endEpochMS); const rval = []; while (curDate < endDate) { rval.push(curDate.toFormat(outputFormat)); curDate = curDate.plus(stepUnit); } return rval; } } //# sourceMappingURL=duration-ratchet.js.map