Blog - Entry for Defkon1

2009/08/28

Modificare date in PHP
Category: PHP

Author: Defkon1 (12:03 pm)
Un mio amico e collaboratore, Ianez, ha preso un piccolo spazio web per pubblicare un sito personale su un server straniero.

Ha copiato via FTP qualche pagina statica ed ha installato senza problemi uno script guestbook in PHP già pronto.

Quando è andato a testare lo script si è però accorto che le date erano relative al fuso orario del server (UTC-6 Central Standard Time) e che quindi gli orari erano tutti sballati di 6 ore. A questo punto mi ha contattato per sapere come poteva aggirare il problema.

Avevo già qualche idea in mente, ma giusto per vedere se c'era qualche snippet in circolazione ho googlato un pochino. Il problema del fuso orario è infatti molto diffuso su Internet, ed ero assolutamente certo che altri sviluppatori e programmatori si fossero già imbattuti in problemi simili.

Da una breve ricerca ho scoperto che tutte le soluzioni in circolazione sono tutte declinazioni di quattro rimedi principali:
  1. modifica del timezone via php.ini (richiede accesso in scrittura al php.ini o sovrascrittura via .htaccess);

  2. utilizzo dell'oggetto DateTimeZone (richiede PHP 5.2.0+)

  3. utilizzo delle funzioni base del PHP

  4. scrittura di proprie funzioni che effettuano operazioni matematiche sul formato Unix Timestamp [int(11)]

Da un breve calcolo statistico a occhio, ho anche scoperto che normalmente tutti scelgono la strada peggiore. La quarta.
Reinventare la ruota è sempre la peggiore delle soluzioni per qualsiasi problema si debba affrontare, fondamentalmente per due motivi: è uno spreco di tempo (e quindi di soldi) e il risultato non sarà sicuramente collaudato e testato come funzioni in circolazione da anni.

Anche escludendo le prime due soluzioni (che magari presentano requisiti di base che negli hosting low-cost raramente si trovano), è sempre preferibile utilizzare gli strumenti che il linguaggio ci mette a disposizione piuttosto che riscrivere voli pindarici.

Qualora si debbano ad esempio manipolare date in PHP, il linguaggio mette a disposizione una semplicissima funzione che permette, in una sola riga di codice, di sommare o sottrarre intervalli di tempo: strtotime().

Questa funzione è presente fin dal PHP4 e permette di effettuare il parsing di una frase testuale (in inglese) in uno Unix Timestamp.

Un esempio chiarificatore, tratto dal problema di Ianez:



Et voilà.
Tutto in una riga di codice, senza dover scrivere/testare/debuggare nessuna propria funzione.

strtotime() è una funzione molto potente e non si limita a sommare/sottrarre ore, per cui vi consiglio di leggerne la documentazione attentamente.

Altri esempi tratti da PHP.net
Read Defkon1's weBLog | Comments (0) | Trackback (0) | Reads (18800)
Trackback URL of this entry
http://www.alessiomarinelli.it/modules/weblog/weblog-tb.php/27
Printer Friendly Page Send this Blog to a Friend

Software, good software, is not built by individuals. It is built by teams. To do this, the teams must possess shared values, principles, and practices.

-Anonymous

Categorie

C# (6)
Elettronica (1)
Eventi (3)
Generale (2)
Linux (9)
MySQL (1)
PHP (1)
Rassegna Stampa (1)
Vita in ufficio (4)
Web (2)
Wii (1)
Windows (2)
Xoops (8)

Hosting

Questo blog è generosamente ospitato da