in core/src/main/java/org/apache/calcite/avatica/util/DateTimeUtils.java [1231:1262]
public static int subtractMonths(int date0, int date1) {
if (date0 < date1) {
return -subtractMonths(date1, date0);
}
int y0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.YEAR, date0);
int m0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.MONTH, date0);
int d0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.DAY, date0);
int y1 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.YEAR, date1);
int m1 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.MONTH, date1);
int d1 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.DAY, date1);
int years = y0 - y1;
boolean adjust = m0 < m1 || m0 == m1 && d0 < d1;
if (adjust) {
years--;
}
int months = 12 * years;
if (adjust) {
months += 12 - (m1 - m0);
} else {
months += m0 - m1;
}
if (d0 < d1) {
months--;
}
return months;
}