Usare la funzione date()
per manipolare le date con il formato convenzionale è più che sufficente. Quando si tratta, però, di gestire le date in un’altro linguaggio che non sia l’inglese (l’italiano per esempio), comincia a essere non del tutto funzionale.
strftime()
. Ma questo da solo non basta perché appunto ci serve che vengano caricate le informazioni della localizzazione al motore e si ottiene con la funzione setlocale()
che acceta due parametri: la categoria dell’informazione (espressa con una costante riservata) e il linguaggio da adoperare per le informazioni.Per il set di costanti e il set di lingue rimando alla pagina del manuale di PHP della funzione
setlocale()
. I segnaposto da usare nella funzione strftime()
non sono uguali a quelli usati per la formattazione della stringa con date()
Vediamo un esempio. Configuriamo prima l’ambiente con la funzione
setlocale()
setlocale(LC_TIME, ‘ita’, ‘it_IT.utf8’);
?>
[/code]
LC_TIME
; se ci serve per tutto l’ambiente, come la divisa, la numerazione, messaggi di ritorno, ecc. useremo LC_ALL
, anche se per ogni casistica esiste la sua costante specifica.Il secondo parametro sarebbe una lista di possibili locale per il sistema operativo in uso. In questo caso
ita
si usa per i servers Windows, mentre un seguente parametro, 'it_IT.utf8'
si usa per per i servers della famiglia *nix.Configurata la lingua possiamo chiamiare la funzione
strftime()
$mia_data = strftime("%A, %d %B %Y");
?>
[/code]
%A
si ottiene il nome del giorno della settimana, la %d
ritorna il giorno del mese nel formato gg
, la %B
ritorna il nome del mese e la %Y
l’anno nel formato yyyy
. Nella pagina del manuale ci sono tutti i segnaposto disponibili per formattare la data secondo le nostre essigenze.Un ultimo appunto per quanto riguarda l’output della stringa. Si riferisce alla visualizzazione dei caratteri non standard, come le vocali accentate. Visto che la non funzione
echo
si occupa di visualizzare e non di trattare l’output, la stringa si dovrebbe filtrare con la funzione utf8_encode()
, e così ci si assicura la sua corretta visualizzazione.echo utf8_encode($mia_data);
# Visualizza: mercoledì, 19 aprile 2012
?>
[/code]
date()
come nell’esempio seguente.$mesi = array(”, ‘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;
?>
[/code]
LC_NUMERIC
e LC_ALL
ci permette di convertire il separatore decimale ogni volta che lo si usa in una stringa, anche se la stringa è una query. Questo è un problema per ogni locale che utilizza la virgola come separatore decimale. Suggeriscono di essere sicuro che LC_NUMERIC
sia impostato su un locale standard e utilizzare le funzioni di formattazione per visualizzare i numeri formattati solo quando è necessario.setlocale(LC_ALL, ‘ita’, ‘it_IT.utf8’);
// sovrascrive il separatore decimale
setlocale(LC_NUMERIC, ‘en_US’);
?>
[/code]
Ancora nessun commento