| Search perlmeme.org | |
| Home » Faqs » Datetime » Comparing dates |
You want to know how many days until a certain date, or how long between two dates. Perl has many different modules to handle dates.
The following program uses the Time::Local module to determine the age (in seconds) of
someone born on the 3rd of May in 1980.
You supply the timelocal() subroutine a date as a six-element array, and it returns
the corresponding value in seconds since the system epoch.
Note that Time::Local expects that the value for the day of the month is a number in
the range 1 to 31, while the value for the month itself is a number in the range 0 to 11,
(since it is considered the number of months since January).
#!/usr/bin/perl
use strict;
use warnings;
use Time::Local;
my @today = localtime();
my $time = timelocal(@today);
my @birthday = (0, 54, 23, 3, 4, 1980);
my $birthtime = timelocal(@birthday);
print "My age in seconds = " . ($time - $birthtime) . "\n";
exit 0;
The output of this program is something like:
My age in seconds = 843513440
The Date::Calc module provides lots of great date and time functionality. The
following example uses the Delta_Days() method to calculate how old the same
person is in days (in other words, it calculates the days between two dates):
#!/usr/bin/perl
use strict;
use warnings;
use Date::Calc qw(Delta_Days);
my @today = (localtime)[5,4,3];
$today[0] += 1900;
$today[1]++;
my @birthday = (1980, 4, 3);
my $days = Delta_Days(@birthday, @today);
print "I am $days days old\n";
exit 0;
The output of this example is something like:
I am 9793 days old
perldoc Time::Local
perldoc Date::Calc
perldoc Date::Manip
perldoc -q "How can I compare two dates and find the difference?"
perldoc DateTime