Commit 2321a47f authored by Xiaowu Zhang's avatar Xiaowu Zhang

erp5_core: handle correctly addToDate when add/remove month

parent a07118b2
......@@ -74,6 +74,10 @@ class TestDateUtils(unittest.TestCase):
addToDate(march_31, month=1).toZone('UTC').ISO())
self.assertEqual(DateTime('2001/05/1 %s' % self.timezone).toZone('UTC').ISO(),
addToDate(march_31, month=1, day=1).toZone('UTC').ISO())
self.assertEqual(DateTime('2001/05/1 %s' % self.timezone).toZone('UTC').ISO(),
addToDate(march_31, month=1, hour=24).toZone('UTC').ISO())
self.assertEqual(DateTime('2001/05/1 %s' % self.timezone).toZone('UTC').ISO(),
addToDate(march_31, hour=24*31).toZone('UTC').ISO())
def test_negative_add_to_date(self):
date = DateTime('2000/01/01 %s' % self.timezone)
......@@ -97,6 +101,10 @@ class TestDateUtils(unittest.TestCase):
may_31 = DateTime('2000/05/31 %s' % self.timezone)
self.assertEqual(DateTime('2000/04/30 %s' % self.timezone).toZone('UTC').ISO(),
addToDate(may_31, month=-1).toZone('UTC').ISO())
self.assertEqual(DateTime('2001/02/27 %s' % self.timezone).toZone('UTC').ISO(),
addToDate(march_31, month=-1, hour=-24).toZone('UTC').ISO())
self.assertEqual(DateTime('2001/02/27 %s' % self.timezone).toZone('UTC').ISO(),
addToDate(march_31, hour=-24*32).toZone('UTC').ISO())
def test_float_add_to_date(self):
date = DateTime('2000/01/01 %s' % self.timezone)
......
......@@ -109,9 +109,8 @@ def addToDate(date, to_add=None, **kw):
return_value[key] = return_value[key] - number_of_in_dict[key]
return_value[larger_key_dict[key]] = return_value[larger_key_dict[key]] + 1
month_in_to_add = to_add.get('month', None)
for key in key_list:
if key == 'day':
continue
if to_add.get(key, None) is not None:
return_value[key] = return_value[key] + to_add[key]
del to_add[key]
......@@ -126,13 +125,7 @@ def addToDate(date, to_add=None, **kw):
for local_key in return_value.keys():
if local_key not in ('day', 'year'):
treatPositiveValues(return_value, local_key)
day_to_add = min(
return_value['day'],
getNumberOfDayInMonth(
DateTime(return_value['year'], int(return_value['month']), 1)
)
) - 1
day_to_add = return_value['day'] - 1
if to_add.get('day', None) is not None:
day_to_add += to_add['day']
return_value['day'] = 1
......@@ -143,6 +136,9 @@ def addToDate(date, to_add=None, **kw):
return_value['minute'],
return_value['second'],
date.timezone()))
overflow_day = date.day() - getNumberOfDayInMonth(return_date)
if (month_in_to_add is not None) and (overflow_day > 0):
day_to_add -= overflow_day
return_date += day_to_add
return return_date
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment