DateTime::SpanSet can do this for you:
use DateTime::SpanSet;
my $dt1 = DateTime->new( year => 2005, month => 1, day => 1 );
my $dt2 = DateTime->new( year => 2005, month => 1, day => 4 );
my $dt3 = DateTime->new( year => 2005, month => 1, day => 7 );
my $dt4 = DateTime->new( year => 2005, month => 1, day => 9 );
my $dt_spanset = DateTime::SpanSet->from_spans( spans => [
DateTime::Span->from_datetimes( start => $dt1, end => $dt2 ),
DateTime::Span->from_datetimes( start => $dt3, end => $dt4 ),
] );
print "duration: @{[ $dt_spanset->duration->deltas ]}\n";
# duration: months 0 days 5 minutes 0 seconds 0 nanoseconds 0