Я думаю, что ваше решение достаточно хорошее. Вы можете избавиться от дополнительных месяцев приведения к дате начала и изменить код, чтобы избавиться от скобок.
q) sd:"d"$ -3+3 xbar "m"$ .z.d
q) ed: -1 + "d"$3 xbar "m"$ .z.d
Или вы можете рассчитать оба в одной строке:
q) 0 -1 + "d"$-3 0 + 3 xbar "m"$.z.d
q) 2019.01.01 2019.03.31