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}"