@zeaovede

Как сделать склонения времени в javascript?

Изначальный вид функции:

function updateSummary() {
    $('#completion-time').text((completion_time <= 0 ? "Invalid" : completion_time <= 24 ? completion_time + " Часов" : Math.ceil(completion_time / 24) + " Дней"));
}

<div class="d-flex gap-1 align-items-center justify-content-center fs-15"><i class="uil uil-stopwatch fs-25"></i> Прим. Время Выполнения: <span class="text-primary" id="completion-time">24 Hours</span></div>

Немного погуглив нашел что-то сильно похожее на то, что мне нужно:
function num_word(value, words){  
	value = Math.abs(value) % 100; 
	var num = value % 10;
	if(value > 10 && value < 20) return words[2]; 
	if(num > 1 && num < 5) return words[1];
	if(num == 1) return words[0]; 
	return words[2];
}
 
$('form input[type="number"]').change(function(){
	var count = 0;
	$('form input[type="number"]').each(function(){
		val = parseInt($(this).val());
		if (!isNaN(val)){
			count = count + val;
		}
	});
   
	$('#js_result').html(count + ' ' + num_word(count, ['товар', 'товара', 'товаров']));
});

<form>
	<label>Выберите количество товаров:</label>
	<p><input type="number" min="0" name="count_1"></p>
	<p><input type="number" min="0" name="count_2"></p>
	<p><input type="number" min="0" name="count_3"></p>
	<p><strong>Итого: <span id="js_result">0</span></strong></p>
</form>

Попробовал адаптировать пример под свое решение. Получилось вот это:

function updateSummary(value, completion_time){
    
//    $('#completion-time').text((completion_time <= 0 ? "Invalid" : completion_time <= 24 ? completion_time + " Часов" : Math.ceil(completion_time / 24) + " Дней"));
}
value = Math.abs(value) % 100; 
	var num = value % 10;
	if(value > 10 && value < 20) return completion_time[2]; 
	if(num > 1 && num < 5) return completion_time[1];
	if(num == 1) return completion_time[0]; 
	return completion_time[2];
}
   
	$('#completion-time').text((completion_time <= 0 ? "Invalid" : count + ' ' + num_completion_time +"count, ['час', 'часа', 'часов']");


Почему может не работать?
  • Вопрос задан
  • 288 просмотров
Решения вопроса 1
XanXanXan
@XanXanXan
function plural(n, titles) {
  return `${n} ` + titles[n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2];
}

function updateSummary(completionTimeHours) {
  document.getElementById('completion-time').textContent =
    completionTimeHours <= 0
      ? 'Invalid'
      : completionTimeHours <= 24
        ? `${plural(completionTimeHours, ['час', 'часа', 'часов'])}`
        : `${plural(Math.ceil(completionTimeHours / 24), ['день', 'дня', 'дней'])}`;
}

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы