I tend to use a couple of routines I wrote. They take leap years into account, and expect the date to be passed in as YYYYMMDD
sub DateNext {
my ($y, $m, $d) = unpack('a4a2a2', $_[0]);
my @daysinmonth = ("31","28","31","30","31","30","31","31","30","31"
+,"30","31");
my @daysinmonthly = ("31","29","31","30","31","30","31","31","30","3
+1","30","31");
$d++;
if (($y % 4) == 0) {
if ($d > @daysinmonthly[$m - 1]) {
$m++;
if ($m > 12) {
$m = 1;
$y++;
} ## End if
$d = 1;
} ## End if
} ## End if
else {
if ($d > @daysinmonth[$m - 1]) {
$m++;
if ($m > 12) {
$m = 1;
$y++;
} ## End if
$d = 1;
} ## End if
} ## End else
my $returndate = sprintf("%04d%02d%02d",$y,$m,$d);
return $returndate;
} ## End sub
### Brings date to the previous day
sub DatePrevious {
my ($y, $m, $d) = unpack('a4a2a2', $_[0]);
my @daysinmonth = ("31","28","31","30","31","30","31","31","30","31"
+,"30","31");
my @daysinmonthly = ("31","29","31","30","31","30","31","31","30","3
+1","30","31");
$d--;
if (($y % 4) == 0) {
if ($d < 1) {
$m--;
if ($m < 1) {
$m = 12;
$y--;
} ## End if
$d = @daysinmonthly[$m - 1];
} ## End if
} ## End if
else {
if ($d < 1) {
$m--;
if ($m < 1) {
$m = 12;
$y--;
} ## End if
$d = @daysinmonth[$m - 1];
} ## End if
} ## End else
my $returndate = sprintf("%04d%02d%02d",$y,$m,$d);
return $returndate;
} ## End sub
Lyle |