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

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");

Outputs 2010-04-23

References

Page Comments (Click to edit)






[Click to add or edit comments])

Please prepend comments below including a date

Design by N.Design Studio, adapted by solidGone.org (version 1.0.0)
Have a nice day.