Re: ,Date calculating software?
- To: mathgroup at smc.vnet.net
- Subject: [mg30445] Re: [mg30414] ,[mg30390] Date calculating software?
- From: Ranko Bojanic <bojanic at math.ohio-state.edu>
- Date: Tue, 21 Aug 2001 03:05:26 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
In a message dated 2001/8/15 1:06:37 AM,"Noz"<NOSPAM at austracom.nz> writes: > Is there a software program or calculator available that can eg.Add a > period of time to a date? > example,today is 14 August 2001. >14082001+18 months > or >14082001+1yr,3mths,4 days,and produces the date 1yr,3mths and 4 days > hence? As several readers have pointed out, the package Miscellaneous`Calendar` contains the function DaysPlus[{y,m,d}, nd] which gives the date nd days away from {y, m, d}. So the simplest solution of the problem of adding two dates {y1,m1,d1} and {y2, m2, d2} would be to convert {y2, m2, d2} into days and use the function DaysPlus. A solution by Bob Hanlon, based on that idea, daysPlus[date_, n_]:= DaysPlus[date, Ceiling[n/.{year ->365.25,month ->365.25/12, day ->1}]] unfortunately does not give correct results in many cases. We have, for instance, daysPlus[{2000, 1, 1}, 1 year] {2001,1,1} which is correct because the year 2000 is a leap year and Ceiling[365.25]=366. On the other hand daysPlus[{2001, 1, 1}, 1 year] {2002, 1, 2} is not correct because the year 2001 has 365 days and Ceiling[365.25]=366. If we have a date {y, m, d} and we add 1 year to that date, we expect to have the date {y+1, m, d}, regardless of the actual length of the year. A solution along these lines, by Tom Burton, DatePlus[{y_, m_, d_},{yy_, mm_, dd_}]:= DaysPlus[{y+yy+Quotient[m+mm,12,1], Mod[m+mm,12, 1],d}, dd] gives correct results: DatePlus[{2001, 1, 1},{1, 0, 0}] {2002,1,1} DatePlus[{2000, 1, 1},{1, 0, 0}] {2001,1,1} It is instructive to apply both formulas to the year 1752 when the calendar was reformed in the English speaking countries: daysPlus[{1752, 1, 1}, 1 year] {1753, 1, 12} DaysBetween[{1753, 1, 12},{1752, 1, 1}] 366 DatePlus[{1752, 1, 1},{1, 0 ,0}] {1753,1,1} DaysBetween[{1753, 1, 1},{1752, 1, 1}] 355 Since the formula daysPlus[{y, m, d}, 1 year] gives the correct result {y+1, m, d} only if y is a leap year, which has 366 days, it would give a correct result in this case too if 11 days were not dropped from the year 1752. Mathematica software is clearly aware of these 11 days: DaysPlus[{1752, 9, 2}, 1] {1752, 9, 14} Regards, Ranko