diff --git a/arrow/arrow.py b/arrow/arrow.py index 7cd5dcb1f..89678e6da 100644 --- a/arrow/arrow.py +++ b/arrow/arrow.py @@ -351,11 +351,12 @@ def interval(cls, frame, start, end, interval=1, tz=None): ''' if interval < 1: raise ValueError("interval has to be a positive integer") - - spanRange = cls.span_range(frame,start,end,tz) - - bound = (len(spanRange) // interval) * interval - return [ (spanRange[i][0],spanRange[i+ interval - 1][1]) for i in range(0,bound, interval) ] + range_span = cls.span_range(frame, start, end, tz) + bound = (len(range_span) // interval) * interval + _range = [(range_span[i][0], range_span[i + interval - 1][1]) for i in range(0,bound, interval) ] + if bound < len(range_span): + _range.append((range_span[bound][0], range_span[-1][1])) + return _range # representations diff --git a/tests/arrow_tests.py b/tests/arrow_tests.py index e5a8b5223..e65b623c9 100644 --- a/tests/arrow_tests.py +++ b/tests/arrow_tests.py @@ -1001,9 +1001,20 @@ def test_incorrect_input(self): def test_correct(self): result = arrow.Arrow.interval('hour', datetime(2013, 5, 5, 12, 30), datetime(2013, 5, 5, 17, 15),2) - assertEqual(result,[(arrow.Arrow(2013, 5, 5, 12), arrow.Arrow(2013, 5, 5, 13, 59, 59, 999999)), + assertEqual(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))]) + (arrow.Arrow(2013, 5, 5, 16), arrow.Arrow(2013, 5, 5, 17, 59, 59, 999999)) + ]) + + def test_correct2(self): + result = arrow.Arrow.interval('hour', datetime(2013, 5, 5, 12, 30), datetime(2013, 5, 5, 22, 15),4) + + assertEqual(result,[ + (arrow.Arrow(2013, 5, 5, 12), arrow.Arrow(2013, 5, 5, 15, 59, 59, 999999)), + (arrow.Arrow(2013, 5, 5, 16), arrow.Arrow(2013, 5, 5, 19, 59, 59, 999999)), + (arrow.Arrow(2013, 5, 5, 20), arrow.Arrow(2013, 5, 5, 22, 59, 59, 999999)) + ]) class ArrowSpanTests(Chai):