import { leadingZero } from '../other/numbers.ts'; /** * Форматирует длительность в секундах в строку вида "MM:SS" или "HH:MM:SS". * Если `forceHours` `true`, то всегда будет выводиться "HH:MM:SS", даже если * длительность меньше часа * * @example * ```ts * import assert from 'node:assert'; * import { formatDuration } from '@vkontakte/vkjs'; * * assert.strictEqual( * formatDuration(123456), * "34:17:36", * ); * * assert.strictEqual( * formatDuration(1234, true), * "0:20:34", * ); * ``` * * @param durationInSeconds Количество секунд, которые требуется отформатировать * @param forceHours Если `true`, то всегда будет выводиться "HH:MM:SS" даже * если длительность меньше часа */ export function formatDuration(durationInSeconds: number, forceHours?: boolean): string { if (!durationInSeconds) { durationInSeconds = 0; } durationInSeconds = Math.abs(durationInSeconds); const MINUTE = 60; const HOUR = 3600; const hours = Math.floor(durationInSeconds / HOUR); const minutes = Math.floor(durationInSeconds / MINUTE) % MINUTE; const seconds = durationInSeconds % MINUTE; if (durationInSeconds >= HOUR || forceHours) { return [hours, leadingZero(minutes), leadingZero(seconds)].join(':'); } else { return [minutes, leadingZero(seconds)].join(':'); } }