diff --git a/arrow/arrow.py b/arrow/arrow.py index f0a57f04..6ca7b067 100644 --- a/arrow/arrow.py +++ b/arrow/arrow.py @@ -643,8 +643,8 @@ def ceil(self, frame: _T_FRAMES, **kwargs: Any) -> "Arrow": def span_range( cls, frame: _T_FRAMES, - start: dt_datetime, - end: dt_datetime, + start: Union["Arrow", dt_datetime], + end: Union["Arrow", dt_datetime], tz: Optional[TZ_EXPR] = None, limit: Optional[int] = None, bounds: _BOUNDS = "[)", @@ -702,8 +702,10 @@ def span_range( """ tzinfo = cls._get_tzinfo(start.tzinfo if tz is None else tz) - start = cls.fromdatetime(start, tzinfo).span(frame, exact=exact)[0] - end = cls.fromdatetime(end, tzinfo) + start = cls.fromdatetime(cls._get_datetime(start), tzinfo).span( + frame, exact=exact + )[0] + end = cls.fromdatetime(cls._get_datetime(end), tzinfo) _range = cls.range(frame, start, end, tz, limit) if not exact: for r in _range: @@ -725,8 +727,8 @@ def span_range( def interval( cls, frame: _T_FRAMES, - start: dt_datetime, - end: dt_datetime, + start: Union["Arrow", dt_datetime], + end: Union["Arrow", dt_datetime], interval: int = 1, tz: Optional[TZ_EXPR] = None, bounds: _BOUNDS = "[)", diff --git a/tests/test_arrow.py b/tests/test_arrow.py index b595e4e2..c1dcfbb9 100644 --- a/tests/test_arrow.py +++ b/tests/test_arrow.py @@ -1628,6 +1628,26 @@ def test_exact(self): assert result == expected + def test_arrow_objects_as_start_end(self): + start = arrow.Arrow(2013, 5, 5, 12, 30) + end = arrow.Arrow(2013, 5, 5, 17, 15) + result = list(arrow.Arrow.interval("hour", start, end, 2)) + + assert result == [ + ( + arrow.Arrow(2013, 5, 5, 12), + arrow.Arrow(2013, 5, 5, 13, 59, 59, 999999), + ), + ( + arrow.Arrow(2013, 5, 5, 14), + arrow.Arrow(2013, 5, 5, 15, 59, 59, 999999), + ), + ( + arrow.Arrow(2013, 5, 5, 16), + arrow.Arrow(2013, 5, 5, 17, 59, 59, 999999), + ), + ] + @pytest.mark.usefixtures("time_2013_02_15") class TestArrowSpan: