cases = (2, 0, 1, 1, 1, 2)
intervals = (
(31536000, 'год', 'года', 'лет'),
(2592000, 'месяц', 'месяца', 'месяцев'),
(86400, 'день', 'дня', 'дней'),
(3600, 'час', 'часа', 'часов'),
(60, 'минуту', 'минуты', 'минут'),
(1, 'секунду', 'секунды', 'секунд'),)
def plural_form(n: int, v: (list, tuple)):
"""Функция возвращает число и просклонённое слово после него
Аргументы:
:param n: число
:param v: варианты слова в формате (для 1, для 2, для 5)
Пример:
plural_form(difference.days, ("день", "дня", "дней"))
:return: Число и просклонённое слово после него
"""
return form(n) + f" {v[2 if (4 < n % 100 < 20) else cases[min(n % 10, 5)]]}"
def form(args):
#Функция форматирует числа в виде ("10000" > "10.000")
return "{:,}".format(args).replace(",", ".")
def show_time(seconds, granularity=5):
"""Функция возвращает цифровое время с использованием utctimestamp"""
result = []
seconds = int(seconds)
for count, *name in intervals:
value = seconds // count
if value:
seconds -= value * count
result.append(plural_form(value, name))
return '. '.join(result[:granularity]) if result else '0 сек'
有这样的功能,show_time
帮我把这段代码转成javascript,我的尝试就出现了:
var cases = [2, 0, 1, 1, 1, 2];
var intervals = [
[31536000, ['год', 'года', 'лет']],
[2592000, ['месяц', 'месяца', 'месяцев']],
[86400, ['день', 'дня', 'дней']],
[3600, ['час', 'часа', 'часов']],
[60, ['минуту', 'минуты', 'минут']],
[1, ['секунду', 'секунды', 'секунд']]
];
function plural_form(n, v){
return n + ` ${v[(4 < n % 100 < 20) ? 2 : cases[Math.min(n % 10, 5)]]}`;
}
function show_time(utctime, granularity=4){
let results = [];
let seconds = parseInt(utctime);
for (var i = 0; i < intervals.lenght; i++) {
let value = Math.floor(seconds / intervals[i][0]);
if (value){
seconds -= value * intervals[i][0]
results.push(plural_form(value, intervals[i][1]))
}
return results.slices(0, granularity).join('. ');
}
}
console.log(show_time(1611584));
↓
4 < n % 100 < 20
- 在 JS 中,这总是给出 true,因为首先它被执行4 < n % 100
,然后从那里返回的那个true / false
与 20 作为0 < 20
or进行比较1 < 20
。这是通过“和”写的,4 < n % 100 && n % 100 < 20
↓
for count, *name in intervals
→ JS 中的解构赋值一起:
该函数可以在几秒钟内计算,但不考虑闰年,而且并非所有月份都有 30 天。不是联名吗?