use DateTime; use DateTime::Format::ISO8601; my ($first, $last) = map { DateTime::Format::ISO8601->parse_datetime($_) } qw < 2013-08-01T20:10:31 2013-08-06T20:09:34 >; my ($sub, $days) = map { $last->$_($first) } qw< subtract_datetime delta_days >; printf "%12s %5s | %-5s\n", 'Value', 'sub', 'days'; printf "%.21s+%.8s\n", ('-'x21)x2; for (qw< months days minutes seconds nanoseconds >) { printf "%12s : %5d | %-5d\n", $_, $sub->{$_}, $days->{$_}; }