perl date calculation with dates of the format 2012-02-03 00:00:00

date, perl

Solution

See DateTime.

#!/usr/bin/env perl
use strict; use warnings;

use DateTime;

my $ts = '2012-02-03 00:00:00';
my ($y, $m, $d) = ($ts =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/);
my $dt = DateTime->new(year => $y, month => $m, day => $d);
$dt->add( months => 2, days => 3 );

print $dt->strftime('%Y-%m-%d %H:%M:%S'), "\n";

It's actually a little cleaner to use a DateTime::Format class, and you get error checking for free.

use DateTime::Format::Strptime qw( );

my $format = DateTime::Format::Strptime->new(
   pattern   => '%Y-%m-%d %H:%M:%S',
   time_zone => 'local',
   on_error  => 'croak',
);

my $ts = '2012-02-03 00:00:00';
my $dt = $format->parse_datetime($ts);
$dt->add( months => 2, days => 3 );
print $format->format_datetime($dt), "\n";

Problem

I need some help with date calculations in perl with dates for the format "2012-02-03 00:00:00". In particular is there a tool I could use to just increment the days and it switches to month and year correctly? Thanks.

Original source