Я посмотрел на это для своего собственного проекта, но решил пойти с решением регулярного выражения.
myDate.format( 'Do MMMM YYYY' ).replace( /(\d)(st|nd|rd|th)/g, '$1<sup>$2</sup>' );
Я понимаю, что OP хотел избежать регулярного выражения, но это простое решение, которое может быть полезным другим.