Переделать строку из javascript
Есть строка, которая показывает время до совершения чуда. Она выглядит следующем образом - "AdBhCmDs", где A, B, C, D - числа, показывающие время. Мне надо переделать её в "A дней, B часов, C минут и D секунд". Если присутствуют только секунды и минуты, то надо оставить только их, и с другими комбинациями так же.
Я ещё ничего не пробовала, так как совсем в этом не разбираюсь.
Немного кода:
var timeleft = '%cbp_ban_player_timeleft%'
function timeleftget() {
if (timeleft == '') {
return ''
}
}
timeleft()
Что писать между ' я не знаю
Ответы (1 шт):
Автор решения: UModeL
→ Ссылка
За основу взята функция из этого ответа. Дальнейшее ещё проще:
- Создаём объект с нужными массивами склонений;
- Ищем в исходной строке числа с единицами измерения и перебираем массив найденных совпадений;
- Передаём полученные индексы и ключи в функцию для выбора склонения.
let out = document.querySelector('.out');
let aDeclination = {
d: ['день', 'дня', 'дней'],
h: ['час', 'часа', 'часов'],
m: ['минута', 'минуты', 'минут'],
s: ['секунда', 'секунды', 'секунд']
};
function fDeclination(int, arr) {
return arr[int % 100 > 4 && int % 100 < 20 ? 2 : [2, 0, 1, 1, 1, 2][int % 10 < 5 ? int % 10 : 5]];
}
function timeleftget(sTime) {
let aTime = sTime.match(/(\d+\w)/g);
for (let i = 0; i < aTime.length; i++) {
out.insertAdjacentHTML('beforeend', `<div><span>${aTime[i].replace(/\D/g, '')}</span><span>${fDeclination(+aTime[i].replace(/\D/g, ''), aDeclination[aTime[i].replace(/\d/g, '')])}</span></div>`);
}
}
timeleftget('27d17h9m31s');
.out { display: flex; justify-content: center; gap: 1em; }
.out > div { display: flex; flex-direction: column; align-items: center; }
.out span:first-child { font: bold 28px/1em sans-serif; }
<div class="out"></div>