Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso inserire il tempo reale di un evento nel database usando php mysqli?

Invece di giocherellare con i fusi orari, perché non farlo semplicemente

ALTER TABLE `your_table`
  CHANGE `date_added` `date_added`
  TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

Ciò cambierà la tua colonna da una colonna DATE a una colonna TIMESTAMP , convertendo tutte le date nei rispettivi timestamp UTC nel processo.

Quando viene inserita una nuova riga, utilizzerà il timestamp corrente come valore . I timestamp sono sempre in UTC, quindi non devi cambiare il fuso orario sul tuo server MySql, né fornire la data quando inserisci una nuova riga.

Se non puoi o non vuoi modificare le tue colonne, puoi anche selezionare il timestamp tramite

SELECT UNIX_TIMESTAMP('date_added') FROM your_table;

Per il tuo TimeAgo, puoi semplicemente fare

$now = new DateTime;
$dateAdded = new DateTime("@$yourTimestampFromDb");
$dateAdded->setTimezone($now->getTimezone());
$timeSinceAdded = $dateAdded->diff($now);

Quando fornisci un timestamp a DateTime, utilizzerà sempre UTC indipendentemente dal fuso orario predefinito del server impostato. Di conseguenza, devi convertire $dateAdded nel fuso orario predefinito (come mostrato sopra) o converti $timeSinceAdded all'UTC.

Per modificare dateTime nel fuso orario dell'utente attualmente in visita, puoi

In ogni caso, devi semplicemente cambiare entrambi DateTimes in quel fuso orario. Questo può essere fatto facilmente tramite setTimezone() .

Il $timeSinceAdded sarà quindi un DateInterval oggetto, che puoi usare in questo modo

echo $timeSinceAdded->format('%a total days');

Fare riferimento ai collegamenti per ulteriori dettagli, ad esempio sui modificatori di formato disponibili.