Per windows il set locale dovrebbe essere:

setlocale(LC_ALL, 'ita_ITA');

invece di:

setlocale(LC_ALL, 'it_IT');

Conviene farsi una funzione di conversione nomi e non servono ne if ne switch. Basta un array dove l'indice e' il mese numerico ed il valore il mese scritto il italiano. Idem per i giorni della settimana.