diff --git a/releasenotes/notes/support-timedelta-wait-unit-type-5ba1e9fc0fe45523.yaml b/releasenotes/notes/support-timedelta-wait-unit-type-5ba1e9fc0fe45523.yaml
new file mode 100644
index 0000000..bc7e62d
--- /dev/null
+++ b/releasenotes/notes/support-timedelta-wait-unit-type-5ba1e9fc0fe45523.yaml
@@ -0,0 +1,3 @@
+---
+features:
+  - Add ``datetime.timedelta`` as accepted wait unit type.
diff --git a/tenacity/wait.py b/tenacity/wait.py
index 289705c..1d87672 100644
--- a/tenacity/wait.py
+++ b/tenacity/wait.py
@@ -17,12 +17,19 @@
 import abc
 import random
 import typing
+from datetime import timedelta
 
 from tenacity import _utils
 
 if typing.TYPE_CHECKING:
     from tenacity import RetryCallState
 
+wait_unit_type = typing.Union[int, float, timedelta]
+
+
+def to_seconds(wait_unit: wait_unit_type) -> float:
+    return float(wait_unit.total_seconds() if isinstance(wait_unit, timedelta) else wait_unit)
+
 
 class wait_base(abc.ABC):
     """Abstract base class for wait strategies."""
@@ -44,8 +51,8 @@ class wait_base(abc.ABC):
 class wait_fixed(wait_base):
     """Wait strategy that waits a fixed amount of time between each retry."""
 
-    def __init__(self, wait: float) -> None:
-        self.wait_fixed = wait
+    def __init__(self, wait: wait_unit_type) -> None:
+        self.wait_fixed = to_seconds(wait)
 
     def __call__(self, retry_state: "RetryCallState") -> float:
         return self.wait_fixed
@@ -61,9 +68,9 @@ class wait_none(wait_fixed):
 class wait_random(wait_base):
     """Wait strategy that waits a random amount of time between min/max."""
 
-    def __init__(self, min: typing.Union[int, float] = 0, max: typing.Union[int, float] = 1) -> None:  # noqa
-        self.wait_random_min = min
-        self.wait_random_max = max
+    def __init__(self, min: wait_unit_type = 0, max: wait_unit_type = 1) -> None:  # noqa
+        self.wait_random_min = to_seconds(min)
+        self.wait_random_max = to_seconds(max)
 
     def __call__(self, retry_state: "RetryCallState") -> float:
         return self.wait_random_min + (random.random() * (self.wait_random_max - self.wait_random_min))
@@ -113,13 +120,13 @@ class wait_incrementing(wait_base):
 
     def __init__(
         self,
-        start: typing.Union[int, float] = 0,
-        increment: typing.Union[int, float] = 100,
-        max: typing.Union[int, float] = _utils.MAX_WAIT,  # noqa
+        start: wait_unit_type = 0,
+        increment: wait_unit_type = 100,
+        max: wait_unit_type = _utils.MAX_WAIT,  # noqa
     ) -> None:
-        self.start = start
-        self.increment = increment
-        self.max = max
+        self.start = to_seconds(start)
+        self.increment = to_seconds(increment)
+        self.max = to_seconds(max)
 
     def __call__(self, retry_state: "RetryCallState") -> float:
         result = self.start + (self.increment * (retry_state.attempt_number - 1))
@@ -142,13 +149,13 @@ class wait_exponential(wait_base):
     def __init__(
         self,
         multiplier: typing.Union[int, float] = 1,
-        max: typing.Union[int, float] = _utils.MAX_WAIT,  # noqa
+        max: wait_unit_type = _utils.MAX_WAIT,  # noqa
         exp_base: typing.Union[int, float] = 2,
-        min: typing.Union[int, float] = 0,  # noqa
+        min: wait_unit_type = 0,  # noqa
     ) -> None:
         self.multiplier = multiplier
-        self.min = min
-        self.max = max
+        self.min = to_seconds(min)
+        self.max = to_seconds(max)
         self.exp_base = exp_base
 
     def __call__(self, retry_state: "RetryCallState") -> float:

diff --git a/tests/test_tenacity.py b/tests/test_tenacity.py
index d9a4858..b6f6bbb 100644
--- a/tests/test_tenacity.py
+++ b/tests/test_tenacity.py
@@ -13,6 +13,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+import datetime
 import logging
 import re
 import sys
@@ -29,7 +30,6 @@ import pytest
 import tenacity
 from tenacity import RetryCallState, RetryError, Retrying, retry
 
-
 _unset = object()
 
 
@@ -180,28 +180,34 @@ class TestWaitConditions(unittest.TestCase):
         self.assertEqual(0, r.wait(make_retry_state(18, 9879)))
 
     def test_fixed_sleep(self):
-        r = Retrying(wait=tenacity.wait_fixed(1))
-        self.assertEqual(1, r.wait(make_retry_state(12, 6546)))
+        for wait in (1, datetime.timedelta(seconds=1)):
+            with self.subTest():
+                r = Retrying(wait=tenacity.wait_fixed(wait))
+                self.assertEqual(1, r.wait(make_retry_state(12, 6546)))
 
     def test_incrementing_sleep(self):
-        r = Retrying(wait=tenacity.wait_incrementing(start=500, increment=100))
-        self.assertEqual(500, r.wait(make_retry_state(1, 6546)))
-        self.assertEqual(600, r.wait(make_retry_state(2, 6546)))
-        self.assertEqual(700, r.wait(make_retry_state(3, 6546)))
+        for start, increment in ((500, 100), (datetime.timedelta(seconds=500), datetime.timedelta(seconds=100))):
+            with self.subTest():
+                r = Retrying(wait=tenacity.wait_incrementing(start=start, increment=increment))
+                self.assertEqual(500, r.wait(make_retry_state(1, 6546)))
+                self.assertEqual(600, r.wait(make_retry_state(2, 6546)))
+                self.assertEqual(700, r.wait(make_retry_state(3, 6546)))
 
     def test_random_sleep(self):
-        r = Retrying(wait=tenacity.wait_random(min=1, max=20))
-        times = set()
-        for x in range(1000):
-            times.add(r.wait(make_retry_state(1, 6546)))
-
-        # this is kind of non-deterministic...
-        self.assertTrue(len(times) > 1)
-        for t in times:
-            self.assertTrue(t >= 1)
-            self.assertTrue(t < 20)
-
-    def test_random_sleep_without_min(self):
+        for min_, max_ in ((1, 20), (datetime.timedelta(seconds=1), datetime.timedelta(seconds=20))):
+            with self.subTest():
+                r = Retrying(wait=tenacity.wait_random(min=min_, max=max_))
+                times = set()
+                for _ in range(1000):
+                    times.add(r.wait(make_retry_state(1, 6546)))
+
+                # this is kind of non-deterministic...
+                self.assertTrue(len(times) > 1)
+                for t in times:
+                    self.assertTrue(t >= 1)
+                    self.assertTrue(t < 20)
+
+    def test_random_sleep_withoutmin_(self):
         r = Retrying(wait=tenacity.wait_random(max=2))
         times = set()
         times.add(r.wait(make_retry_state(1, 6546)))
@@ -274,18 +280,20 @@ class TestWaitConditions(unittest.TestCase):
         self.assertEqual(r.wait(make_retry_state(8, 0)), 256)
         self.assertEqual(r.wait(make_retry_state(20, 0)), 1048576)
 
-    def test_exponential_with_min_wait_and_max_wait(self):
-        r = Retrying(wait=tenacity.wait_exponential(min=10, max=100))
-        self.assertEqual(r.wait(make_retry_state(1, 0)), 10)
-        self.assertEqual(r.wait(make_retry_state(2, 0)), 10)
-        self.assertEqual(r.wait(make_retry_state(3, 0)), 10)
-        self.assertEqual(r.wait(make_retry_state(4, 0)), 10)
-        self.assertEqual(r.wait(make_retry_state(5, 0)), 16)
-        self.assertEqual(r.wait(make_retry_state(6, 0)), 32)
-        self.assertEqual(r.wait(make_retry_state(7, 0)), 64)
-        self.assertEqual(r.wait(make_retry_state(8, 0)), 100)
-        self.assertEqual(r.wait(make_retry_state(9, 0)), 100)
-        self.assertEqual(r.wait(make_retry_state(20, 0)), 100)
+    def test_exponential_with_min_wait_andmax__wait(self):
+        for min_, max_ in ((10, 100), (datetime.timedelta(seconds=10), datetime.timedelta(seconds=100))):
+            with self.subTest():
+                r = Retrying(wait=tenacity.wait_exponential(min=min_, max=max_))
+                self.assertEqual(r.wait(make_retry_state(1, 0)), 10)
+                self.assertEqual(r.wait(make_retry_state(2, 0)), 10)
+                self.assertEqual(r.wait(make_retry_state(3, 0)), 10)
+                self.assertEqual(r.wait(make_retry_state(4, 0)), 10)
+                self.assertEqual(r.wait(make_retry_state(5, 0)), 16)
+                self.assertEqual(r.wait(make_retry_state(6, 0)), 32)
+                self.assertEqual(r.wait(make_retry_state(7, 0)), 64)
+                self.assertEqual(r.wait(make_retry_state(8, 0)), 100)
+                self.assertEqual(r.wait(make_retry_state(9, 0)), 100)
+                self.assertEqual(r.wait(make_retry_state(20, 0)), 100)
 
     def test_legacy_explicit_wait_type(self):
         Retrying(wait="exponential_sleep")
@@ -335,7 +343,7 @@ class TestWaitConditions(unittest.TestCase):
             )
         )
         # Test it a few time since it's random
-        for i in range(1000):
+        for _ in range(1000):
             w = r.wait(make_retry_state(1, 5))
             self.assertLess(w, 9)
             self.assertGreaterEqual(w, 6)

Support timedelta as a valid type for `wait` classes
Currently, the `wait`ing classes only take `int` or `float` as their wait unit types where they are representing seconds.
It would make for a better, more readable code if I could simply pass in a `datetime.timedelta` instead and thus also avoid passing in `wait=60*5` for 5 minutes and instead could `wait=timedelta(minutes=5)`
tests/test_tenacity.py::TestWaitConditions::test_exponential_with_min_wait_andmax__wait tests/test_tenacity.py::TestWaitConditions::test_fixed_sleep tests/test_tenacity.py::TestWaitConditions::test_incrementing_sleep tests/test_tenacity.py::TestWaitConditions::test_random_sleep
tests/test_tenacity.py::TestBase::test_callstate_repr tests/test_tenacity.py::TestBase::test_retrying_repr tests/test_tenacity.py::TestStopConditions::test_legacy_explicit_stop_type tests/test_tenacity.py::TestStopConditions::test_never_stop tests/test_tenacity.py::TestStopConditions::test_stop_after_attempt tests/test_tenacity.py::TestStopConditions::test_stop_after_delay tests/test_tenacity.py::TestStopConditions::test_stop_all tests/test_tenacity.py::TestStopConditions::test_stop_and tests/test_tenacity.py::TestStopConditions::test_stop_any tests/test_tenacity.py::TestStopConditions::test_stop_func_with_retry_state tests/test_tenacity.py::TestStopConditions::test_stop_or tests/test_tenacity.py::TestWaitConditions::test_exponential tests/test_tenacity.py::TestWaitConditions::test_exponential_with_max_wait tests/test_tenacity.py::TestWaitConditions::test_exponential_with_max_wait_and_multiplier tests/test_tenacity.py::TestWaitConditions::test_exponential_with_min_wait tests/test_tenacity.py::TestWaitConditions::test_exponential_with_min_wait_and_multiplier tests/test_tenacity.py::TestWaitConditions::test_legacy_explicit_wait_type tests/test_tenacity.py::TestWaitConditions::test_no_sleep tests/test_tenacity.py::TestWaitConditions::test_random_sleep_withoutmin_ tests/test_tenacity.py::TestWaitConditions::test_wait_arbitrary_sum tests/test_tenacity.py::TestWaitConditions::test_wait_chain tests/test_tenacity.py::TestWaitConditions::test_wait_chain_multiple_invocations tests/test_tenacity.py::TestWaitConditions::test_wait_combine tests/test_tenacity.py::TestWaitConditions::test_wait_double_sum tests/test_tenacity.py::TestWaitConditions::test_wait_exponential_jitter tests/test_tenacity.py::TestWaitConditions::test_wait_func tests/test_tenacity.py::TestWaitConditions::test_wait_random_exponential tests/test_tenacity.py::TestWaitConditions::test_wait_random_exponential_statistically tests/test_tenacity.py::TestWaitConditions::test_wait_retry_state_attributes tests/test_tenacity.py::TestWaitConditions::test_wait_triple_sum tests/test_tenacity.py::TestRetryConditions::test_retry_all tests/test_tenacity.py::TestRetryConditions::test_retry_and tests/test_tenacity.py::TestRetryConditions::test_retry_any tests/test_tenacity.py::TestRetryConditions::test_retry_if_exception_message_negative_no_inputs tests/test_tenacity.py::TestRetryConditions::test_retry_if_exception_message_negative_too_many_inputs tests/test_tenacity.py::TestRetryConditions::test_retry_if_not_result tests/test_tenacity.py::TestRetryConditions::test_retry_if_result tests/test_tenacity.py::TestRetryConditions::test_retry_or tests/test_tenacity.py::TestRetryConditions::test_retry_try_again tests/test_tenacity.py::TestRetryConditions::test_retry_try_again_forever tests/test_tenacity.py::TestRetryConditions::test_retry_try_again_forever_reraise tests/test_tenacity.py::TestDecoratorWrapper::test_defaults tests/test_tenacity.py::TestDecoratorWrapper::test_retry_except_exception_of_type tests/test_tenacity.py::TestDecoratorWrapper::test_retry_function_object tests/test_tenacity.py::TestDecoratorWrapper::test_retry_if_exception_message tests/test_tenacity.py::TestDecoratorWrapper::test_retry_if_exception_message_match tests/test_tenacity.py::TestDecoratorWrapper::test_retry_if_exception_of_type tests/test_tenacity.py::TestDecoratorWrapper::test_retry_if_not_exception_message tests/test_tenacity.py::TestDecoratorWrapper::test_retry_if_not_exception_message_delay tests/test_tenacity.py::TestDecoratorWrapper::test_retry_if_not_exception_message_match tests/test_tenacity.py::TestDecoratorWrapper::test_retry_until_exception_of_type_attempt_number tests/test_tenacity.py::TestDecoratorWrapper::test_retry_until_exception_of_type_no_type tests/test_tenacity.py::TestDecoratorWrapper::test_retry_until_exception_of_type_wrong_exception tests/test_tenacity.py::TestDecoratorWrapper::test_with_stop_on_exception tests/test_tenacity.py::TestDecoratorWrapper::test_with_stop_on_return_value tests/test_tenacity.py::TestDecoratorWrapper::test_with_wait tests/test_tenacity.py::TestRetryWith::test_redefine_wait tests/test_tenacity.py::TestRetryWith::test_redefine_stop tests/test_tenacity.py::TestRetryWith::test_retry_error_cls_should_be_preserved tests/test_tenacity.py::TestRetryWith::test_retry_error_callback_should_be_preserved tests/test_tenacity.py::TestBeforeAfterAttempts::test_after_attempts tests/test_tenacity.py::TestBeforeAfterAttempts::test_before_attempts tests/test_tenacity.py::TestBeforeAfterAttempts::test_before_sleep tests/test_tenacity.py::TestBeforeAfterAttempts::test_before_sleep_log_raises tests/test_tenacity.py::TestBeforeAfterAttempts::test_before_sleep_log_raises_with_exc_info tests/test_tenacity.py::TestBeforeAfterAttempts::test_before_sleep_log_returns tests/test_tenacity.py::TestBeforeAfterAttempts::test_before_sleep_log_returns_with_exc_info tests/test_tenacity.py::TestReraiseExceptions::test_reraise_by_default tests/test_tenacity.py::TestReraiseExceptions::test_reraise_from_retry_error tests/test_tenacity.py::TestReraiseExceptions::test_reraise_no_exception tests/test_tenacity.py::TestReraiseExceptions::test_reraise_timeout_from_retry_error tests/test_tenacity.py::TestStatistics::test_stats tests/test_tenacity.py::TestStatistics::test_stats_failing tests/test_tenacity.py::TestRetryErrorCallback::test_retry_error_callback tests/test_tenacity.py::TestContextManager::test_context_manager_on_error tests/test_tenacity.py::TestContextManager::test_context_manager_reraise tests/test_tenacity.py::TestContextManager::test_context_manager_retry_error tests/test_tenacity.py::TestContextManager::test_context_manager_retry_one tests/test_tenacity.py::TestInvokeAsCallable::test_retry_one tests/test_tenacity.py::TestInvokeAsCallable::test_on_error tests/test_tenacity.py::TestInvokeAsCallable::test_retry_error tests/test_tenacity.py::TestInvokeAsCallable::test_reraise tests/test_tenacity.py::TestRetryException::test_retry_error_is_pickleable tests/test_tenacity.py::TestMockingSleep::test_decorated tests/test_tenacity.py::TestMockingSleep::test_decorated_retry_with