From 90a24b185c7e324cfadca1bdd77f387060b7cf03 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Wed, 9 Feb 2022 10:45:15 -0300 Subject: [PATCH] Bug 30061: Make Koha::Patron->get_age use DateTime math This patch does what the title says. Instead of converting dates to strings and performing math manually, we can just use the DateTime objects we have and calculate the DateTime::Duration there's between them, to get the years count. To test: 1. Run: $ kshell k$ prove t/db_dependent/Koha/Patrons.t => SUCCESS: Tests pass 2. Apply this patch 3. Repeat 1 => SUCCESS: Tests pass 4. Sign off :-D Signed-off-by: Tomas Cohen Arazi Signed-off-by: David Nind Signed-off-by: Marcel de Rooy Signed-off-by: Fridolin Somers --- Koha/Patron.pm | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/Koha/Patron.pm b/Koha/Patron.pm index 6414abf9cb..0c16079fa9 100644 --- a/Koha/Patron.pm +++ b/Koha/Patron.pm @@ -1223,7 +1223,7 @@ sub get_routing_lists { =head3 get_age -my $age = $patron->get_age + my $age = $patron->get_age Return the age of the patron @@ -1231,19 +1231,13 @@ Return the age of the patron sub get_age { my ($self) = @_; - my $today_str = dt_from_string->strftime("%Y-%m-%d"); - return unless $self->dateofbirth; - my $dob_str = dt_from_string( $self->dateofbirth )->strftime("%Y-%m-%d"); - my ( $dob_y, $dob_m, $dob_d ) = split /-/, $dob_str; - my ( $today_y, $today_m, $today_d ) = split /-/, $today_str; + return unless $self->dateofbirth; - my $age = $today_y - $dob_y; - if ( $dob_m . $dob_d > $today_m . $today_d ) { - $age--; - } + my $date_of_birth = dt_from_string( $self->dateofbirth ); + my $today = dt_from_string->truncate( to => 'day' ); - return $age; + return $today->subtract_datetime( $date_of_birth )->years; } =head3 is_valid_age -- 2.11.0