code: @Override
      PaxDate plusMonths(long monthsToAdd) {
          if (monthsToAdd == 0) {
              return this;
          }
          long calcMonths = Math.addExact(getProlepticMonth(), monthsToAdd);
          // "Regularize" the month count, as if years were all 13 months long.
          long monthsRegularized = calcMonths - getLeapMonthsBefore(calcMonths);
          int newYear = YEAR.checkValidIntValue(Math.floorDiv(monthsRegularized, MONTHS_IN_YEAR));
          int newMonth = Math.toIntExact(calcMonths - ((long) newYear * MONTHS_IN_YEAR + getLeapYearsBefore(newYear)) + 1);
          return resolvePreviousValid(newYear, newMonth, getDayOfMonth());
      }
docs: Returns a copy of this {@code PaxDate} with the specified period in months added.
  <p>
  This method adds the specified amount to the months field in three steps:
  <ol>
  <li>Add the input months to the month-of-year field</li>
  <li>Check if the resulting date would be invalid</li>
  <li>Adjust the day-of-month to the last valid day if necessary</li>
  </ol>
  <p>
  For example, 2006-12-13 plus one month would result in the invalid date 2006-13-13.
  Instead of returning an invalid result, the last valid day of the month, 2006-13-07, is selected instead.
  <p>
  This instance is immutable and unaffected by this method call.
  
  @param monthsToAdd  the months to add, may be negative
  @return a {@code PaxDate} based on this date with the months added, not null
  @throws DateTimeException if the result exceeds the supported date range