You can build Unix time (in 1970) by multiplying the month number by the average number of seconds per month (2628000) and taking 15 days so that it is always somewhere in the middle of the month. Thus, it works well and avoids unnecessary overhead:
function month_name($i) { return date('F', $i * 2628000 - 1314000); }
Actual dates (if you replace 'd FY' with 'F') change from January 16, 1970 to December 16, 1970 with $ i from 1 to 12. You can do a similar trick to get the names of the days (from 1 - 7 - Monday Sunday):
function day_name($i) { return date('l', $i * 86400 + 302400); }
source share