Ottenere date in italiano
Spesso si ha la necessità di presentare le date in un formato più gradevole del solito gg/mm/hhhh. Se la funzione date se la cava egregiamente per questo formato un po' spartano, non si può dire altrettanto quando si cerca di ottenere l’indicazione del mese o del giorno della settimana in lettere (ad es. domenica 13 marzo 2005) poiché il risultato sarebbe in inglese.
PHP mette a disposizione la funzione strftime che in coppia con la funzione setlocale permette di ottenere delle date che rispettino la lingua impostata. Purtroppo però l’indicazione della lingua da passare a setlocale non è valida per qualsiasi sistema operativo ma dipende da questo.
Il seguente esempio è valido per un server Windows:
<?php
setlocale(LC_TIME, 'ita');
echo strftime("%A %d %B %Y");
?>
Invece per un server Linux (sperimentato su Fedora Core I):
<?php
setlocale(LC_TIME, 'it_IT');
echo strftime("%A %d %B %Y");
?>
I casi possibili ovviamente non si esauriscono solo a questi due appena visti, sono molte infatti le segnalazioni di insuccessi delle precedenti stringhe della lingua.
Inoltre, anche se si avesse l’intera casistica a disposizione, rimarrebbe il problema di individuare correttamente il sistema operativo del server se vogliamo rendere i nostri script portabili.
Una soluzione un po' artigianale potrebbe essere la seguente, che si basa sulla semplice traduzione dei giorni della settimana e dei mesi dalla loro indicazione numerica al relativo nome in lettere:
<?php
$mesi = array(1=>'gennaio', 'febbraio', 'marzo', 'aprile',
'maggio', 'giugno', 'luglio', 'agosto',
'settembre', 'ottobre', 'novembre','dicembre');
$giorni = array('domenica','lunedì','marted','mercoledì',
'giovedì','venerdì','sabato');
list($sett,$giorno,$mese,$anno) = explode('-',date('w-d-n-Y'));
echo $giorni[$sett],' ',$giorno,' ',$mesi[$mese],' ',$anno;
?>
Non sarà la soluzione più elegante ma è garantita al 100%!
Dalla versione 4.3.0 di PHP la funzione setlocale è diventata però più flessibile. Infatti ora è possibile passare diverse stringe per individuare la lingua desiderata. In altre parole è possibile fondere i due esempi iniziali nel modo seguente:
<?php
setlocale(LC_TIME, 'ita', 'it_IT');
echo strftime("%A %d %B %Y");
?>