diff --git a/C4/Serials.pm b/C4/Serials.pm index b203c32a4d..46d019da4d 100644 --- a/C4/Serials.pm +++ b/C4/Serials.pm @@ -2444,7 +2444,8 @@ sub _get_next_date_month { $day = $fa_day <= $days_in_month ? $fa_day : $days_in_month; } else { # Try to guess the next day in month - my $delta_days = int((28 - ($fa_day - 1)) / $freqdata->{issuesperunit}); + my $days_in_month = Days_in_Month($year, $month); + my $delta_days = int(($days_in_month - ($fa_day - 1)) / $freqdata->{issuesperunit}); ($year,$month,$day) = Add_Delta_Days($year, $month, $day, $delta_days); $subscription->{countissuesperunit}++; } @@ -2465,7 +2466,8 @@ sub _get_next_date_year { $day = $fa_day <= $days_in_month ? $fa_day : $days_in_month; } else { # Try to guess the next day in year - my $delta_days = int((365 - ($fa_day - 1)) / $freqdata->{issuesperunit}); + my $days_in_year = Days_in_Year($year,12); #Sum the days of all the months of this year + my $delta_days = int(($days_in_year - ($fa_day - 1)) / $freqdata->{issuesperunit}); ($year,$month,$day) = Add_Delta_Days($year, $month, $day, $delta_days); $subscription->{countissuesperunit}++; } diff --git a/t/db_dependent/Serials/GetNextDate.t b/t/db_dependent/Serials/GetNextDate.t index c9fe98c132..fe6059fd73 100644 --- a/t/db_dependent/Serials/GetNextDate.t +++ b/t/db_dependent/Serials/GetNextDate.t @@ -371,11 +371,11 @@ $subscription = { }; $publisheddate = $subscription->{firstacquidate}; $publisheddate = GetNextDate($subscription, $publisheddate); -is($publisheddate, '1970-01-15'); +is($publisheddate, '1970-01-16', 'January has 31 days'); $publisheddate = GetNextDate($subscription, $publisheddate); is($publisheddate, '1970-02-01'); $publisheddate = GetNextDate($subscription, $publisheddate); -is($publisheddate, '1970-02-15'); +is($publisheddate, '1970-02-15', 'February has only 28 days'); $publisheddate = GetNextDate($subscription, $publisheddate); is($publisheddate, '1970-03-01'); @@ -388,13 +388,13 @@ $subscription = { }; $publisheddate = $subscription->{firstacquidate}; $publisheddate = GetNextDate($subscription, $publisheddate); -is($publisheddate, '1970-01-15'); +is($publisheddate, '1970-01-16', 'January has 31 days'); $publisheddate = GetNextDate($subscription, $publisheddate); -is($publisheddate, '1970-02-15'); +is($publisheddate, '1970-02-15', 'February has only 28 days'); $publisheddate = GetNextDate($subscription, $publisheddate); is($publisheddate, '1970-04-01'); $publisheddate = GetNextDate($subscription, $publisheddate); -is($publisheddate, '1970-04-15'); +is($publisheddate, '1970-04-16', 'April has 30 days'); $publisheddate = GetNextDate($subscription, $publisheddate); is($publisheddate, '1970-05-01');