I ran into the same problem a few weeks ago. Try this code, it isn't pretty, but it has worked reliably so far. Note, this code will back off on a day to keep the month. I.e., if you want one month after January 31, it will give you February 28 (on a non-leap year) or February 29 (on a leap year): # Define the method for calculating X number of months ahead... def DateAhead(theDate, num_months=0): dateStr = str(theDate) startingYear = dateStr[0:4] startingMonth = dateStr[5:7] startingDay = dateStr[8:10] endingMonth = int(startingMonth) + num_months endingYear = int(startingYear) endingDay = int(startingDay) # Add years to correspond to the added months... while endingMonth > 12: endingYear = endingYear + 1 endingMonth = endingMonth - 12 # Check to make sure that the ending month has the requisite days... dateFound = 0 while dateFound == 0: try: newDate = DateTime(str(endingYear) + '/' + str(endingMonth) + '/' + str(endingDay)) dateFound = 1 # If you got this far, the date must be good. except: endingDay = endingDay - 1 dateFound = 0 return newDate
I'm trying to add an arbitrary number of months to a DateTime value, and keep running into problems.
My code looks like this:
----- ## Script (Python) "NewDate" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters=Member, Effective_Date, Months_Added ##title= ## Old_Date = Member.PaidThrough Eff_Date = DateTime(Effective_Date)
if Eff_Date > Old_Date: Old_Date = Eff_Date
Month = Old_Date.month() Day = Old_Date.day() Year = Old_Date.year()
NewDate = DateTime(Year,Month+int(Months_Added),Day)
return NewDate -----
The problem arises when DateTime() tries to create a new date out of values like 2002,21,15 (reached by adding 15 months to 2002-06-15). Is there a way to coerce DateTime() to handle situations like this, or an algorithm for 'fixing' such date addition?
--- Chris Carlson
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )