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