Ottenere date in italiano

di Gianni Tomasicchio - 13 marzo 2005

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");
?>

9 commenti

1 paolo paolo martedž 28 aprile 2009, ore 18:03
mi è tornato molto utile, grazie
2 Salvatore Salvatore lunedž 14 giugno 2010, ore 17:52
<b>Grazie 1000!</b>
Ottima soluzione
3 Nuovobuio Nuovobuio domenica 11 luglio 2010, ore 00:20
Ti ringrazio.
4 zuzu zuzu martedž 5 ottobre 2010, ore 17:19
Grazie infinite!! Finalmente!!!!!!!
5 Severino Tognoni Severino Tognoni sabato 15 gennaio 2011, ore 16:45
Salve, mi sono imbattuto in un calendario al quale voglio cambiare la data.
ho aggiunto il; setlocale(LC_TIME, 'ita', 'it_IT');
ma non so proprio come modificare questo, sopratutto per avere i mesi in italiano
$month = (isset($month)) ? $month : date("n",time());
$year = (isset($year)) ? $year : date("Y",time());
$today = (isset($today))? $today : date("j", time());
$daylong = date("l",mktime(1,1,1,$month,$today,$year));
$monthlong = date("m",mktime(1,1,1,$month,$today,$year));
$dayone = date("w",mktime(1,1,1,$month,1,$year));
$numdays = date("t",mktime(1,1,1,$month,1,$year));
Saluti e grazie per l'aiuto.
Severino
6 walter walter mercoledž 6 aprile 2011, ore 19:49
Grazie mille!!!! erano ore che sbattevo il muso su questa cosa...

ciauuuu
7 SaXeee SaXeee mercoledž 15 giugno 2011, ore 11:51
Suggerimento risolutivo! TKX
8 luciana luciana martedž 21 giugno 2011, ore 13:26
Ottimo! grazie mille per il suggerimento!!
9 Mirco Mirco giovedž 25 agosto 2011, ore 17:11
Grazie!! Molto utile!!
Effettua l'accesso o registrati per inserire un commento