Adjusting Date By Number Of Days
Unix system time is the number of seconds elapsed since January 1, 1970.
Dates and times can be calculated from a system time number, with Perl, using the localtime() function.
To adjust a date by a certain number of days, convert the date to a system time number, adjust the system time number by 86400 for each day, then convert the result into a date. (86400 is the number of seconds in a day.)
Here is a Perl script to do that. The script starts with a date. It then prints the date 90 days later and the date 90 days earlier.
#!/usr/bin/perl use strict; use Time::Local; sub CalendarDateToSystemTime { # assumes month numbers are 1=January, 12=December my($day,$month,$year) = @_; $year -= 1900 if $year > 1900; return timelocal(0,0,0,$day,($month-1),$year); } # sub CalendarDateToSystemTime sub SystemTimeToCalendarDateAdjusted { my ($systemtime,$daysadjustment) = @_; $systemtime += ($daysadjustment * 24 * 60 * 60); my ($sec,$min,$hour,$day,$month,$year,$wday,$yday,$isdst) = localtime($systemtime); my @monthname = qw(January February March April May June July August September October November December); return ($day,$monthname[$month],$year+1900); } # sub SystemTimeToCalendarDateAdjusted my($Day,$Month,$Year) = (23,2,2009); # 23rd of February, 2009 my $SystemTime = CalendarDateToSystemTime($Day,$Month,$Year); print "Content-type: text/html\n\n<html><body><pre>23rd of February, 2009\n"; ($Day,$Month,$Year) = SystemTimeToCalendarDateAdjusted($SystemTime,+90); print "+90 days = $Day-$Month-$Year\n"; ($Day,$Month,$Year) = SystemTimeToCalendarDateAdjusted($SystemTime,-90); print "-90 days = $Day-$Month-$Year\n"; print '</pre></body></html>';
Will Bontrager