Il Timestamp

Rispondi
Avatar utente
Micogian
Amministratore
Messaggi: 104
Iscritto il: 28/11/2014, 19:32

Il Timestamp

Messaggio da Micogian »

Il "timestamp"

Guardando i dati inseriti nel database molti si saranno accorti che nei campi relativi alle "date" c'è un numero di 10 cifre. Cosa significa ?
E' il "timestamp" o "unix timestamp", il sistema utilizzato in PHP per gestire le date e conoscerne le caratteristiche può tornare utile in molte funzioni che gestiscono le date.

In pratica il "timestamp" rappresenta il numero di secondi trascorsi dalle ore 00:00 del 1 gennaio 1970.

Vediamo ora quali sono i comandi PHP legati al timestamp.

time() - fornisce il timestamp al momento della sua esecuzione
Il timestamp corrispondente al momento nel quale sto scrivendo queste righe (ore 07.28 del 17 dicembre 2010) è dato dal seguente codice:

Codice: Seleziona tutto

<?php
echo time();
// il risultato sarà 1292567307
?>
mktime() - fornisce il timestamp di una determinata data. Questa funzione prevede l'inserimento di 6[+1] valori interi secondo questo ordine:
ore, minuti, secondi, mese, giorno, anno e infine un valore (facoltativo: 0-1) che indica alla funzione come comportarsi con l'ora legale.
Se vogliamo conoscere il timestamp corrispondente alle ore 24.00 del 31 dicembre 2010 usiamo questo codice.

Codice: Seleziona tutto

<?php
echo mktime(24,00,0,12,31,2010);
// il risultato sarà 1293836400
?>
Naturalmente i valori inseriti possono essere delle variabili.
Vediamo alcuni esempi:

Codice: Seleziona tutto

<?php
$anno = '2010';
$mese = '12';
$giorno = '1';
echo mktime(0,0,0,$mese,$giorno,$anno);
// stamperà il timestamp alle ore 00:00 del 1/12/2010, cioè 1291158000
?>
Possiamo anche inserire l'anno con due cifre, basta ricordare che i valori 0-69 saranno interpretati come 2000-2069
mentre i valori 70-99 verranno interpretati come 1970-1999 in virtù del fatto che l'inizio è fissato al 1/1/1970.

Naturalmente, vedendo un timestamp non abbiamo la minima idea di che data rappresenti, vediamo quindi come fare a restituire un valore comprensibile del timestamp.
Il comando preposto a tale compito è date().

La struttura del comando è date(formato, [timestamp]).

formato = è una stringa composta da caratteri che costituiscono i parametri della formattazione.
La lista completa dei parametri si trova nel Manuale php, questi sono alcuni tra i più usati:

D giorno della settimana (abbreviato a 3 lettere)
d giorno del mese (da 1 a 31)
m mese (da 1 a 12)
M mese (abbreviato a 3 caratteri)
F mese (stringa)
Y anno a quattro cifre
y anno a due cifre
H ore (00-24)
h ore (00-12)
i minuti
s secondi


ecco alcuni esempi:

Codice: Seleziona tutto

<?php
echo date("d/m/Y H:i", 1291158000);
// il risultato sarà:  1/12/2010 00:00

echo date("D d M Y H:i", 1293836399);
// il risultato sarà:  Fri 31 Dec 2010 23:59
// ricordiamo che le stringhe sono in inglese
?>
L'inserimento del timestamp nel comando date() è opzionale, se non viene inserito viene restituita la data corrente.

Un esempio pratico dell'utilizzo del timestamp è questo: "vogliamo sapere quali Utenti si sono collegati in data odierna".

Codice: Seleziona tutto

<?php
// recuperiamo i valori di anno, mese, giorno della data odierna
$aa = date(Y);
$mm = date(m);
$dd = date(d);

$data_start = mktime(0,0,0,$mm,$dd,$aa); // timestamp alle ore 00:00 del giorno corrente
?>
A questo punto il valore $data_start è il timestamp alle ore 00:00 di oggi, possiamo fare una query che interroga
la tabella phpbb_users per ottenere la Lista degli Utenti che abbiano un "user_lastvisit" superiore e quindi si siano collegati dopo il periodo fissato.

Codice: Seleziona tutto

<?php
$dd = date(d);
$mm = date(m) ;
$aa = date(Y) ;
$data_start = mktime(0,0,0,$mm,$dd,$aa); // timestamp alle ore 00 del giorno corrente

$sql = "SELECT user_id, username, user_lastvisit, user_colour
   FROM " . USERS_TABLE . "
   WHERE user_lastvisit > $data_start
   ORDER by username";

   $result = $db->sql_query($sql);

   while($row = $db->sql_fetchrow($result)) {

       $template->assign_block_vars('lista_users', array(   
      'USER_LIST'      => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
      ));
    }
?>
Dato che la funzione get_username_string() restituisce il nome dell'utente con i colori del Gruppo di appartenenza, possiamo passare il risultato al template
ed ottenere tramite l'array "lista_users" una Lista degli Utenti collegati in data odierna.
Rispondi