What is the recommended way of doing date arithmetics in Perl?
11,112
Solution 1
You can use DateTime and DateTime::Duration
http://search.cpan.org/dist/DateTime/lib/DateTime/Duration.pm
Or work with unix timestamps:
my $now = time();
my $threeDaysAgo = $now - 3 * 86400;
my ($day, $mon, $year) = (localtime($threeDaysAgo))[3, 4, 5];
printf("Three days ago was %04d-%02d-%02d", $year+1900, $mon+1, $day);
Solution 2
See DateTime on CPAN (or here).
Solution 3
There are many, many different date and time manipulation modules.
These include:
- Date::Calc - and the Add_Delta_Days function
- Date::Manip - and the DateCalc function
- DateTime
All of these are well thought of. There are many others in addition. A lot depends on the sort of arithmetic you want to do. DateTime is perhaps the most rigorous, but Date::Calc and Date::Manip may be easier to handle for the work you need.
Author by
knorv
Updated on July 23, 2022Comments
-
knorv almost 2 years
What is the recommended way of doing date arithmetics in Perl?
Say for example that I want to know the date three days ago from today (where
today
=2010-10-17
andtoday - 3 days
=2010-10-13
). How would you do that in Perl? -
plusplus over 13 yearsyou don't even need to bother with DateTime::Duration itself for a lot of date manipulation, e.g.
$three_days_ago = DateTime->now()->subtract( days => 3 )
-
OMG_peanuts over 13 yearsThe only thing to take care, using DateTime, is to minimize the number of DateTime objects you instantiate (could be pretty time consuming to allocate and destroy). Reuse as often as possible.