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');