Skip to content
Snippets Groups Projects
Commit 6f8250bb authored by Jiří Setnička's avatar Jiří Setnička
Browse files

Přesnější funkce timedelta

Pokud je první část menší jak 10, tak vypisujeme i následující jednotku. Tvoříme
tak stringy jako 'za 28 dní', 'za 8 dní 16 hodin', ...

Fix #67
parent 53ec8807
No related branches found
No related tags found
No related merge requests found
...@@ -46,33 +46,39 @@ def timedelta(d: datetime, ref: Optional[datetime] = None, descriptive: bool = F ...@@ -46,33 +46,39 @@ def timedelta(d: datetime, ref: Optional[datetime] = None, descriptive: bool = F
prefix = "za " prefix = "za "
before = False before = False
# Zkonstruujeme nejvýše dvě části: pokud je v první číslo >= 10, další už
# nekonstruujeme, pokud je <10, tak přidáme ještě jednu část. Tvoříme tedy
# řetězce jako: "za 28 dní", "za 8 dní 16 hodin", "za 7 hodin 55 minut",
# "za 55 minut", "za 3 minuty 12 sekund", ...
parts = []
prev = 0
if delta.days > 0: if delta.days > 0:
unitprefix = ''
if before: if before:
value = inflect_number(delta.days, 'den' if descriptive else 'dnem', 'dny', 'dny') parts.append(inflect_number(delta.days, 'den' if descriptive else 'dnem', 'dny', 'dny'))
else: else:
value = inflect_number(delta.days, 'den', 'dny', 'dní') parts.append(inflect_number(delta.days, 'den', 'dny', 'dní'))
else: prev = delta.days
if delta.seconds > 3600:
unitprefix = 'hodin'
number = delta.seconds // 3600
elif delta.seconds > 60:
unitprefix = 'minut'
number = delta.seconds // 60
else:
unitprefix = 'sekund'
number = delta.seconds
seconds = delta.seconds
for (unitprefix, s) in [('hodin', 3600), ('minut', 60), ('sekund', 1)]:
number = seconds // s
seconds = seconds % s
if len(parts) == 2 or (len(parts) == 1 and number == 0) or prev >= 10:
break
if number == 0:
continue
prev = number
if before: if before:
# 1 minuta před, 3 minuty před, 5 minut před / před 1 minutou, před 3 minutami, před 5 minutami # 1 minuta před, 3 minuty před, 5 minut před / před 1 minutou, před 3 minutami, před 5 minutami
if descriptive: if descriptive:
value = inflect_number(number, 'a', 'y', '', unitprefix=unitprefix) parts.append(inflect_number(number, 'a', 'y', '', unitprefix=unitprefix))
else: else:
value = inflect_number(number, 'ou', 'ami', 'ami', unitprefix=unitprefix) parts.append(inflect_number(number, 'ou', 'ami', 'ami', unitprefix=unitprefix))
else: else:
# 1 minuta po, 3 minuty po, 5 minut po / za 1 minutu, za 3 minuty, za 5 minut # 1 minuta po, 3 minuty po, 5 minut po / za 1 minutu, za 3 minuty, za 5 minut
value = inflect_number(number, 'a' if descriptive else 'u', 'y', '', unitprefix=unitprefix) parts.append(inflect_number(number, 'a' if descriptive else 'u', 'y', '', unitprefix=unitprefix))
value = " ".join(parts)
return f"{prefix}{value}{suffix}" return f"{prefix}{value}{suffix}"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment