I think that this method for calculating the start of quarter month is more readable:

    static const int8_t QUARTER_START_MONTH_BY_MONTH[] = { /*[0] not used*/-1,  1, 1, 1,  4, 4, 4,  7, 7, 7,  10, 10, 10 };
    int8_t quarter_start_month = QUARTER_START_MONTH_BY_MONTH[as_date.month()];

Note spelling of "quarter".