Еще более короткая версия для дат в месяце (до 31) вместо использования mktime () и не требующая pecl intl:
function ordinal($n) {
return (new DateTime('Jan '.$n))->format('jS');
}
или процедурно:
echo date_format(date_create('Jan '.$n), 'jS');
Это работает, конечно, потому что месяц по умолчанию, который я выбрал (январь), имеет 31 день.
Интересно, что если вы попробуете это с февралем (или другим месяцем без 31 дня), он перезапускается до конца:
...clip...
31st
1st
2nd
3rd
, чтобы вы могли считать дни месяца с указателем даты t
в цикле: количество дней в месяце.