MCPcopy Index your code
hub / github.com/MALSync/MALSync / relativeToDuration

Function relativeToDuration

src/utils/IntlWrapper.ts:345–371  ·  view source on GitHub ↗
(
  input: number,
  units: (keyof typeof dateUnitToMs)[] = ['minutes', 'hours', 'days', 'years'],
  relativeTo: Date | number = 0,
)

Source from the content-addressed store, hash-verified

343}
344
345export function relativeToDuration(
346 input: number,
347 units: (keyof typeof dateUnitToMs)[] = ['minutes', 'hours', 'days', 'years'],
348 relativeTo: Date | number = 0,
349): { duration: DurationFormat; isFuture: boolean } {
350 const duration: DurationFormat = {};
351 const relative = new Date(relativeTo).getTime();
352 let time = Math.abs(relative - input);
353 const isFuture = input > relative;
354
355 for (const key in dateUnitToMs) {
356 if (!units.includes(key as keyof typeof dateUnitToMs)) continue;
357 const value = Math.floor(time / dateUnitToMs[key]);
358 duration[key] = value;
359 }
360 const mapKeys = Object.keys(duration);
361 for (let i = 1; i < mapKeys.length; i++) {
362 const keyPrev = mapKeys[i - 1];
363 const valuePrev = duration[keyPrev];
364 const keyCurr = mapKeys[i];
365
366 time -= dateUnitToMs[keyPrev] * valuePrev;
367 const valueCurr = Math.floor(time / dateUnitToMs[keyCurr]);
368 duration[keyCurr] = valueCurr;
369 }
370 return { duration, isFuture };
371}
372
373export function timeToString(time: DurationFormat): string {
374 let output = '';

Callers 1

processMethod · 0.85

Calls 1

keysMethod · 0.80

Tested by

no test coverage detected