You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.5 KiB
46 lines
1.5 KiB
/**
|
|
* Преобразует секунды в формат "дни ЧЧ:ММ:СС" (если дни > 0)
|
|
* или просто "ЧЧ:ММ:СС" (если дней нет).
|
|
* @param {number} totalSeconds - количество секунд (целое неотрицательное число)
|
|
* @returns {string} отформатированная строка
|
|
*/
|
|
function formatSeconds(totalSeconds) {
|
|
if (totalSeconds < 0) return "0 00:00:00";
|
|
|
|
const days = Math.floor(totalSeconds / 86400);
|
|
let remainder = totalSeconds % 86400;
|
|
|
|
const hours = Math.floor(remainder / 3600);
|
|
remainder %= 3600;
|
|
|
|
const minutes = Math.floor(remainder / 60);
|
|
const seconds = remainder % 60;
|
|
|
|
// Форматируем часы, минуты, секунды с ведущими нулями
|
|
const timePart = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
|
|
|
|
if (days === 0) {
|
|
return timePart;
|
|
}
|
|
|
|
// Склонение слова "день"
|
|
let dayWord;
|
|
const lastDigit = days % 10;
|
|
const lastTwoDigits = days % 100;
|
|
|
|
if (lastTwoDigits >= 11 && lastTwoDigits <= 14) {
|
|
dayWord = "дней";
|
|
} else {
|
|
switch (lastDigit) {
|
|
case 1: dayWord = "день"; break;
|
|
case 2:
|
|
case 3:
|
|
case 4: dayWord = "дня"; break;
|
|
default: dayWord = "дней";
|
|
}
|
|
}
|
|
|
|
return `${days} ${dayWord} ${timePart}`;
|
|
}
|
|
|
|
module.exports = {formatSeconds}
|