ciao a tutti,
una cortesia.. cè un modo semplice e veloce per convertire una stringa del genere 201003
in "Marzo 2010" ?
ciao a tutti,
una cortesia.. cè un modo semplice e veloce per convertire una stringa del genere 201003
in "Marzo 2010" ?
il valore da passare a setlocale dipende dal sistema su cui gira PHP.Codice PHP:
function mese($data) {
preg_match('/(....)(..)/', $data, $match);
setlocale('LC_ALL', 'it_IT.utf-8');
return strftime('%B %Y', mktime(0,0,0,$match[2],1,$match[1]));
}
echo mese('201003');
grandioso!!!!!!!!!
Grazie 1000. Non riesco a capire però perchè mi esce questo errore:
Ho guardato la funzione setlocale, ma non mi sembra sia scritta sbagliata.Codice PHP:
Warning: setlocale() [function.setlocale]: Passing locale category name as string is deprecated. Use the LC_* -constants instead.
Da cosa dipende?
Si errore mio, togli gli apici intorno a LC_ALL
preg_match('/(....)(..)/', $data, $match);Originariamente inviato da k.b
il valore da passare a setlocale dipende dal sistema su cui gira PHP.Codice PHP:
function mese($data) {
preg_match('/(....)(..)/', $data, $match);
setlocale('LC_ALL', 'it_IT.utf-8');
return strftime('%B %Y', mktime(0,0,0,$match[2],1,$match[1]));
}
echo mese('201003');
....
setlocale('LC_ALL', 'it_IT.utf-8');
...
strftime('%B %Y', mktime(0,0,0,$match[2],1,$match[1]));
...
no è un pò dispendioso a livello di risorse solo per tirare fuori il mese?
non sarebbe meglio il classico vecchio e arcaico metodo
Codice PHP:
<?php
function mese($str){
$mesi=array(
'01'=>'Gennaio',
'02'=>'Febbraio',
'03'=>'Marzo',
'04'=>'Aprile',
'05'=>'Maggio',
'06'=>'Giugno',
'07'=>'Luglio',
'08'=>'Agosto',
'09'=>'Settembre',
'10'=>'Ottobre',
'11'=>'Novembre',
'12'=>'Dicembre'
)
return $mesi[substr($str,-2)];
}
?>
Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle
il mio profilo su PHPClasses e il mio blog laboweb
No, questo genere di micro-ottimizzazioni sono del tutto irrilevanti in un'applicazione PHP. Limare qualche microsecondo ha senso se devi scrivere un motore grafico ultra-ottimizzato e anche il singolo ciclo di clock del processore in piu' ti fa la differenza, ma in un'applicazione scritta in un linguaggio interpretato di alto livello, una (eventuale peraltro) differenza di velocita' di questo genere e' totalmente trascurabile.Originariamente inviato da dottwatson
no è un pò dispendioso a livello di risorse solo per tirare fuori il mese?
Usare gli strumenti che il PHP offre, e scrivere codice chiaro ed adattabile e' molto piu' importante: ad esempio, nel caso in questione se in futuro vuoi fare la stessa cosa con l'ouput in un'altra lingua, con strftime ti basta cambiare una costante, con l'array devi riscrivere a mano tutti i mesi.
Davvero, in PHP le micro-ottimizzazioni sono al 99% uno spreco di tempo che sarebbe meglio speso migliorando altre parti del codice.
NI, nel senso che la differenza la fa anche il margine di utilizzo del codice.. se gli serve 1 tantum, sempre, o ha un ciclo di importazione e deve processare 50.000 stringhe diverse al giornoOriginariamente inviato da k.b
No, questo genere di micro-ottimizzazioni sono del tutto irrilevanti in un'applicazione PHP.
vero, ma adattabile implica abche 'non invadente'... un setlocale() non potrebbe esserlo?Usare gli strumenti che il PHP offre, e scrivere codice chiaro ed adattabile e' molto piu' importante: ad esempio, nel caso in questione se in futuro vuoi fare la stessa cosa con l'ouput in un'altra lingua, con strftime ti basta cambiare una costante, con l'array devi riscrivere a mano tutti i mesi.
anche il tipo usati per il testo apici fanno la differenza in tempi di resaDavvero, in PHP le micro-ottimizzazioni sono al 99% uno spreco di tempo che sarebbe meglio speso migliorando altre parti del codice.![]()
Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle
il mio profilo su PHPClasses e il mio blog laboweb
Gia', ma all'atto pratico quanta differenza fa? Difficile dirlo, bisogna ogni volta fare dei benchmark per scoprire che dopo 50k iterazioni tra le due soluzioni c'e' una differenza di 0,012 secondi quando il tempo di risposta di una pagina dipende per la maggior parte da fattori esterni alla pura elaborazione del codice (interazione col db, caricamento di risorse esterne, latenza di rete, etc.). Non dico che le micro-ottimizzazioni non servano a *niente*, dico che:Originariamente inviato da dottwatson
NI, nel senso che la differenza la fa anche il margine di utilizzo del codice.. se gli serve 1 tantum, sempre, o ha un ciclo di importazione e deve processare 50.000 stringhe diverse al giorno
- e' difficile/impossibile capire a occhio se una cosa e' piu' veloce di un'altra
- prima di passare a queste cose c'e' un grosso elenco di altre ottimizzazioni di livello molto piu' alto che vengono trascurate nella maggior parte degli script (specie quelli che vedi su questo forum)
Poi in genere le regexp vengono scartate come "troppo lente" perche' ormai fa moda dirlo e - mio parere - perche' pochi le conoscono abbastanza bene da capire quanto un pattern sia molto piu' leggibile, versatile e comodo che scrivere degli indici numerici in una substr() (peraltro nel tuo codice alternativo dovrestri chiamare substr 2 volte perche' serve anche l'anno).
In che modo e' invadente? In teoria setlocale() e' una cosa che chiami una volta in un pezzo di codice che includi in tutte le pagine se devi fare un'applicazione localizzata. Mi sembrano piu' invadenti n array con i mesi in varie lingueOriginariamente inviato da dottwatson
vero, ma adattabile implica abche 'non invadente'... un setlocale() non potrebbe esserlo?
Non ho capito...Originariamente inviato da dottwatson
anche il tipo usati per il testo apici fanno la differenza in tempi di resa![]()
mi sono incartato nello scrivereOriginariamente inviato da k.b
Gia', ma all'atto pratico quanta differenza fa? Difficile dirlo, bisogna ogni volta fare dei benchmark per scoprire che dopo 50k iterazioni tra le due soluzioni c'e' una differenza di 0,012 secondi quando il tempo di risposta di una pagina dipende per la maggior parte da fattori esterni alla pura elaborazione del codice (interazione col db, caricamento di risorse esterne, latenza di rete, etc.). Non dico che le micro-ottimizzazioni non servano a *niente*, dico che:
- e' difficile/impossibile capire a occhio se una cosa e' piu' veloce di un'altra
- prima di passare a queste cose c'e' un grosso elenco di altre ottimizzazioni di livello molto piu' alto che vengono trascurate nella maggior parte degli script (specie quelli che vedi su questo forum)
Poi in genere le regexp vengono scartate come "troppo lente" perche' ormai fa moda dirlo e - mio parere - perche' pochi le conoscono abbastanza bene da capire quanto un pattern sia molto piu' leggibile, versatile e comodo che scrivere degli indici numerici in una substr() (peraltro nel tuo codice alternativo dovrestri chiamare substr 2 volte perche' serve anche l'anno).
In che modo e' invadente? In teoria setlocale() e' una cosa che chiami una volta in un pezzo di codice che includi in tutte le pagine se devi fare un'applicazione localizzata. Mi sembrano piu' invadenti n array con i mesi in varie lingue
Non ho capito...![]()
la frase doveva essere
anche il tipo di apici usati per il testo hanno la differenza in tempi di resa
quando parlo di invadenza, parlo di script i quali, per produrre il risultato ottenuto, non vadano ad influire su impostazioni e/o richiamare funzionalità dell' OS, che possano produrre quindi impostazioni di carattere globale che produrrebbero potenziali errori e/o conflitti
ho a che fare con circa 800 siti l'anno, di cui uan parte è sviluppata in maniera interna e un' altra proviene dall' esterno e ti posso garantire che che l' invadenza di uno script è una cosa che fa veramente incazzare quando influisce su di te
Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle
il mio profilo su PHPClasses e il mio blog laboweb
Ok, sono d'accordo se parli di cose come system('/bin/ls -laF') ma setlocale() che c'entra?
Per quanto riguarda gli apici, hai visto doppie virgolette nel mio codice sopra?![]()