diff --git a/mo/util_format.py b/mo/util_format.py
index 1b77ef32775a61312c348ced9f924c1a6bfabca8..663cb581e834de1ed161648dc7cebd5c3a44d6fc 100644
--- a/mo/util_format.py
+++ b/mo/util_format.py
@@ -46,33 +46,39 @@ def timedelta(d: datetime, ref: Optional[datetime] = None, descriptive: bool = F
prefix = "za "
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:
- unitprefix = ''
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:
- value = inflect_number(delta.days, 'den', 'dny', 'dní')
- else:
- 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
+ parts.append(inflect_number(delta.days, 'den', 'dny', 'dní'))
+ prev = delta.days
+ 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:
# 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:
- value = inflect_number(number, 'a', 'y', '', unitprefix=unitprefix)
+ parts.append(inflect_number(number, 'a', 'y', '', unitprefix=unitprefix))
else:
- value = inflect_number(number, 'ou', 'ami', 'ami', unitprefix=unitprefix)
+ parts.append(inflect_number(number, 'ou', 'ami', 'ami', unitprefix=unitprefix))
else:
# 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}"