Если я правильно читаю ваш вопрос, вы должны вернуть «2» для 31 января и 1 февраля, потому что он охватывает как январь, так и февраль, даже если они разнесены только на 1 день.
Вы могли бы потренироваться (psuedocode):
monthno1 = (date1_year * 12) + date1_month;
monthno2 = (date2_year * 12) + date2_month;
return (monthno2 - monthno1) + 1;
Предполагается, что вторая дата является более поздней.