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
?>
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
?>
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
?>
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
?>
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
?>
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']),
));
}
?>
ed ottenere tramite l'array "lista_users" una Lista degli Utenti collegati in data odierna.