Snippet: giocare con le date in PHP
mercoledì 5 novembre 2008Undolog a me stimola la fantasia. Le sue snippet poi, sono utilissime, ma ti fanno anche venir voglia di mettere in moto il cervello: un po' come la settimana enigmistica.
Ieri, spulciando il suo blog, mi sono imbattuto in questo post. La sua snippet (che permette di convertire date dal formato yyyy-mm-dd hh:mm:ss a yyyymmddhhmmss) è molto carina, ma sinceramente io "sono di un'altra parrocchia".
Uso direttamente le funzioni che PHP mette a disposizione.
$data = "2008-11-05 12:05:08";
echo date("YmdHis",strtotime($data));
Restituisce infatti 20081105120508...
Prediamo ad esempio le date 31/12/2008 ore 12.45 e 31/12/2008 ore 13.00: ad occhio è facile capire quale sia più in là nel tempo delle due (la seconda).
Trasformandole nei loro corrispettivi numerici secondo il formato citato in precedenza otteniamo due numeri interi:
- La prima diventa 200812311245
- La seconda diventa 200812311300
Facile poi effettuare un semplice confronto: il secondo numero è maggiore del primo. Basta un normale confronto "maggiore / minore" (con un if ad esempio)...
Per sapere quali sono i formati accettati dalla funzione consiglio di leggere il manuale GNU, capitolo "Date input formats". Lo trovate qui
Il mio codice sarà anche più "facile" da leggere, ma quello di Undolog è tremendamente più veloce (non che avessi dei dubbi, eh): per rendere l'idea ho fatto un rapido (e sicuramente empirico) benchmark eseguendo i 2 script 10.000 volte sulla stessa data.
Il mio codice viene eseguito in circa 2.5 secondi, quello di Giovambattista si attesta intorno agli 0.15! Se siete maniaci delle performance... Beh, buttatevi sulla snippet di Undolog!
Già che ci siamo... Volete sapere come cronometrare il vostro codice PHP? Leggete qua!
P.s.
Leggi questo post via web... Ti stai perdendo le info e gli alert colorati!
In alternativa puoi abbonarti alla newsletter, riceverai un'email ogni volta che verrà pubblicato un nuovo post. Il tuo indirizzo email sarà gestito da Feedburner.













5 novembre 2008 alle 10:03
Fantastico!! Ottimo nuovo template e ottimo post… anch’io userei la sintassi che hai proposto tu, chissà qual’è la più veloce; se la regular expression o la
date(... strtotime() )?!5 novembre 2008 alle 10:16
@Giovambattista Fazioli
Ehm… L’ho fatto il benchmark… Lo trovi alla fine del post.
5 novembre 2008 alle 10:31
strototime tutta la vita.. ti rende indipendente dal formato iniziale..
5 novembre 2008 alle 14:03
uhm… da capra totale di PHP non posso che dirti: mi fido
bello il nuovo template, bravo! (sto reprimendo l’istinto di dirti che da bravo miope preferisco i caratteri senza grazie, meno confusi e più leggibili per le talpe come me…. ops non mi sono represso abbastanza
)
6 novembre 2008 alle 08:14
Interessante il benchmark, ad occhio avrei creduto che la funzione nativa sarebbe stata più performante!
Ciao,
Emanuele
6 novembre 2008 alle 15:42
Vedi anche questo commento…