Adding to or Subtracting from a Date
Problem
You have a date and time and want to find the date and time of some period in the future or past.
Solution
Simply add or subtract Epoch seconds:
$when = $now + $difference; $then = $now - $difference;
If you have distinct DMYHMS values, use the CPAN
Date::Calc module. If you’re doing arithmetic with days only,
use Add_Delta_Days
($offset
is
a positive or negative integral number of days):
use Date::Calc qw(Add_Delta_Days); ($y2, $m2, $d2) = Add_Delta_Days($y, $m, $d, $offset);
If you are concerned with hours, minutes, and seconds (in other
words, times as well as dates), use
Add_Delta_DHMS
:
use Date::Calc qw(Add_Delta_DHMS); ($year2, $month2, $day2, $h2, $m2, $s2) = Add_Delta_DHMS( $year, $month, $day, $hour, $minute, $second, $days_offset, $hour_offset, $minute_offset, $second_offset );
Discussion
Calculating with Epoch seconds is easiest, disregarding the effort to get dates and times into and out of Epoch seconds. This code shows how to calculate an offset (55 days, 2 hours, 17 minutes, and 5 seconds, in this case) from a given base date and time:
$birthtime = 96176750; # 18/Jan/1973, 3:45:50 am
$interval = 5 + # 5 seconds
17 * 60 + # 17 minutes
2 * 60 * 60 + # 2 hours
55 * 60 * 60 * 24; # and 55 days
$then = $birthtime + $interval;
print "Then is ", scalar(localtime($then)), "\n";
Then is Wed Mar 14 06:02:55 1973
We could have used Date::Calc’s
Add_Delta_DHMS
function and avoided the conversion
to and from Epoch seconds:
use Date::Calc ...
Get Perl Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.