From 8ded5338509b89351532a4f1e9168bfdcfa45f8b Mon Sep 17 00:00:00 2001 From: chansen Date: Wed, 20 Apr 2016 12:10:58 +0200 Subject: [PATCH] Fixed ->subtract_datetime_absolute ->subtract_datetime_absolute returns the absolute difference between two instants. --- lib/DateTimeX/Moment.pm | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/DateTimeX/Moment.pm b/lib/DateTimeX/Moment.pm index 9949d86..b8f8a72 100644 --- a/lib/DateTimeX/Moment.pm +++ b/lib/DateTimeX/Moment.pm @@ -482,20 +482,18 @@ sub subtract_datetime_absolute { my ($lhs, $rhs) = @_; my $class = ref $lhs; - # normalize - $rhs = $class->from_object(object => $rhs) unless $rhs->isa($class); - $rhs = $rhs->clone->set_time_zone($lhs->time_zone) unless $lhs->time_zone eq $rhs->time_zone; + $rhs = $class->from_object(object => $rhs) + unless $rhs->isa($class); - my ($lhs_moment, $rhs_moment) = map { $_->{_moment} } ($lhs, $rhs); - my $sign = $lhs_moment < $rhs_moment ? -1 : 1; - ($lhs_moment, $rhs_moment) = ($rhs_moment, $lhs_moment) if $sign == -1; + my ($lhs_moment, $rhs_moment) = ($lhs->{_moment}, $rhs->{_moment}); my $seconds = $rhs_moment->delta_seconds($lhs_moment); - my $nanoseconds = $rhs_moment->delta_nanoseconds($lhs_moment) % 1_000_000_000; + my $nanoseconds = $rhs_moment->plus_seconds($seconds) + ->delta_nanoseconds($lhs_moment); return DateTimeX::Moment::Duration->new( - seconds => $sign * $seconds, - nanoseconds => $sign * $nanoseconds, + seconds => $seconds, + nanoseconds => $nanoseconds, ); }