Get a date from the past or in the present given an integer
#!/usr/bin/perl
sub dateOffset {
($int, $date) = @_;
if ($int < 0) {
$int = $int*-1;
$time = $date;
$time -= $int*(24 * 60 * 60);
return scalar localtime($time);
} elsif ($int == 0) {
$time = $date;
return scalar localtime($time);
} elsif ($int > 0) {
$time = $date;
$time += $int*(24 * 60 * 60);
return scalar localtime($time);
}
return 0;
}
$twoDaysAgo = dateOffset(-2);
$today = dateOffset(0);
$fiveDaysInFuture = dateOffset(5);
print <<EOL;
Two days ago: $twoDaysAgo
Today: $today
Five days in future: $fiveDaysInFuture
EOL
sub dateOffset {
($int, $date) = @_;
if ($int < 0) {
$int = $int*-1;
$time = $date;
$time -= $int*(24 * 60 * 60);
return scalar localtime($time);
} elsif ($int == 0) {
$time = $date;
return scalar localtime($time);
} elsif ($int > 0) {
$time = $date;
$time += $int*(24 * 60 * 60);
return scalar localtime($time);
}
return 0;
}
$twoDaysAgo = dateOffset(-2);
$today = dateOffset(0);
$fiveDaysInFuture = dateOffset(5);
print <<EOL;
Two days ago: $twoDaysAgo
Today: $today
Five days in future: $fiveDaysInFuture
EOL
Another version with date formatting
sub dateOffset {
($int, $date) = @_;
($year, $month, $day) = split(/-/, $date);
if ($int < 0) {
$int = $int*-1;
$time = mktime(0, 0, 0, $day, $month, ($year-1900));
$time -= $int*(24 * 60 * 60);
return scalar POSIX::strftime("%Y-%m-%d", localtime($time));
} elsif ($int == 0) {
$time = mktime(0, 0, 0, $day, $month, ($year-1900));
return scalar POSIX::strftime("%Y-%m-%d", localtime($time));
} elsif ($int > 0) {
$time = mktime(0, 0, 0, $day, $month, ($year-1900));
$time += $int*(24 * 60 * 60);
return scalar POSIX::strftime("%Y-%m-%d", localtime($time));
}
}
$date = "2010-04-22";
$dateOffset = dateOffset3(1, $date);
print($dateOffset . "\n");
($int, $date) = @_;
($year, $month, $day) = split(/-/, $date);
if ($int < 0) {
$int = $int*-1;
$time = mktime(0, 0, 0, $day, $month, ($year-1900));
$time -= $int*(24 * 60 * 60);
return scalar POSIX::strftime("%Y-%m-%d", localtime($time));
} elsif ($int == 0) {
$time = mktime(0, 0, 0, $day, $month, ($year-1900));
return scalar POSIX::strftime("%Y-%m-%d", localtime($time));
} elsif ($int > 0) {
$time = mktime(0, 0, 0, $day, $month, ($year-1900));
$time += $int*(24 * 60 * 60);
return scalar POSIX::strftime("%Y-%m-%d", localtime($time));
}
}
$date = "2010-04-22";
$dateOffset = dateOffset3(1, $date);
print($dateOffset . "\n");
Outputs 2010-04-23
References
[Click to add or edit comments])
Please prepend comments below including a date