Difference of Two Dates
Problem
You need to find the number of days between two dates or times.
Solution
If your dates are in Epoch seconds, and fall in the range
Fri Dec 13 20:45:52 1901 to
Tue Jan 19 03:14:07 2038 (inclusive),
simply subtract one from the other and convert the seconds to days.
$seconds = $recent - $earlier;
If you have distinct DMYMHS values, or are worried about the range limitations of Epoch seconds, use the Date::Calc module from CPAN. It can calculate the difference between dates:
use Date::Calc qw(Delta_Days); $days = Delta_Days( $year1, $month1, $day1, $year2, $month2, $day2);
It also calculates the difference between dates and times:
use Date::Calc qw(Delta_DHMS);
($days, $hours, $minutes, $seconds) =
Delta_DHMS( $year1, $month1, $day1, $hour1, $minute1, $seconds1, # earlier
$year2, $month2, $day2, $hour2, $minute2, $seconds2); # laterDiscussion
One problem with Epoch seconds is how to convert the large integers back to forms that people can read. The following example shows one way of converting an Epoch seconds value back to its component numbers of weeks, days, hours, minutes, and seconds:
$bree = 361535725; # 16 Jun 1981, 4:35:25
$nat = 96201950; # 18 Jan 1973, 3:45:50
$difference = $bree - $nat;
print "There were $difference seconds between Nat and Bree\n";
There were 265333775 seconds between Nat and Bree $seconds = $difference % 60; $difference = ($difference - $seconds) / 60; $minutes = $difference % 60; $difference = ($difference - $minutes) / 60; ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access