[Erp5-report] r20097 - /erp5/trunk/products/ERP5Type/DateUtils.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Mar 21 16:12:57 CET 2008


Author: aurel
Date: Fri Mar 21 16:12:55 2008
New Revision: 20097

URL: http://svn.erp5.org?rev=20097&view=rev
Log:
add a new method that return list of day, week, month, year between
two dates 

Modified:
    erp5/trunk/products/ERP5Type/DateUtils.py

Modified: erp5/trunk/products/ERP5Type/DateUtils.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/DateUtils.py?rev=20097&r1=20096&r2=20097&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/DateUtils.py (original)
+++ erp5/trunk/products/ERP5Type/DateUtils.py Fri Mar 21 16:12:55 2008
@@ -38,7 +38,7 @@
     'getIntervalBetweenDates', 'getMonthAndDaysBetween',
     'getCompletedMonthBetween', 'getRoundedMonthBetween',
     'getMonthFraction', 'getYearFraction', 'getAccountableYearFraction',
-    'getBissextilCompliantYearFraction',
+    'getBissextilCompliantYearFraction', 'getIntervalListBetweenDates',
     'getDecimalNumberOfYearsBetween','roundMonthToGreaterEntireYear',
     'roundDate', 'convertDateToHour', 'getNumberOfDayInMonth')
 
@@ -220,6 +220,56 @@
       returned_value[key] = value
   return returned_value
 
+
+def getIntervalListBetweenDates(from_date=None, to_date=None,
+                            keys={'year':1, 'month':1, 'week' : 1, 'day':1}):
+  """
+  Return the list of years, months and days (if each is equal to 1 in keys)
+  between the both given dates including the current one.
+  If one of the given dates is None, the date used is the current time.
+  """
+  # key -> format dict
+  format_dict = {'year':'%Y',
+                 'month':'%Y-%m',
+                 'week':'%Y-%V',
+                 'day':'%Y-%m-%d',
+                 }
+    
+  if from_date is None:
+    from_date = DateTime()
+  if to_date is None:
+    to_date = DateTime()
+  if from_date - to_date > 0:
+    from_date, to_date = to_date, from_date
+    to_inverse = 1
+  else:
+    to_inverse = 0  
+    
+  diff_value = {}
+  for key in keys.keys():
+    if key:
+      diff_value[key] = []
+  
+  for current_key in ('year', 'month', 'week', 'day'):
+    if keys.get(current_key, None):
+      new_date = from_date
+      while new_date <= to_date:
+        diff_value[current_key].append(new_date.strftime(format_dict[current_key]))
+        if current_key == "week":
+          new_date = addToDate(new_date, to_add={'day':7})
+        else:
+          new_date = addToDate(new_date, to_add={current_key:1})
+      if not entire and to_date.strftime(format_dict[current_key]) not in diff_value[current_key]:
+        diff_value[current_key].append(to_date.strftime(format_dict[current_key]))
+    
+  returned_value = {}
+  for key, value in diff_value.items():
+    if to_inverse:
+      value.reverse()
+      returned_value[key] = value
+    else:
+      returned_value[key] = value
+  return returned_value
 
 def getMonthAndDaysBetween(from_date=None, to_date=None):
   """




More information about the Erp5-report mailing list