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

