Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je insérer le temps réel d'un événement dans la base de données en utilisant php mysqli ?

Au lieu de jouer avec les fuseaux horaires, pourquoi ne pas simplement le faire

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

Cela va changer votre colonne d'une colonne DATE à une colonne TIMESTAMP , convertissant toutes les dates en leurs horodatages UTC respectifs dans le processus.

Lorsqu'une nouvelle ligne est insérée, elle utilisera l'horodatage actuel comme valeur . Les horodatages sont toujours en UTC, vous n'avez donc pas besoin de changer le fuseau horaire sur votre serveur MySql, ni de fournir la date lors de l'insertion d'une nouvelle ligne.

Si vous ne pouvez pas ou ne voulez pas modifier vos colonnes, vous pouvez également simplement sélectionner l'horodatage via

SELECT UNIX_TIMESTAMP('date_added') FROM your_table;

Pour votre TimeAgo, il vous suffit alors de faire

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

Lorsque vous fournissez un horodatage à DateTime, il utilisera toujours UTC quel que soit le fuseau horaire de votre serveur par défaut. Par conséquent, vous devez soit convertir $dateAdded au fuseau horaire par défaut (comme indiqué ci-dessus) ou convertissez $timeSinceAdded à UTC.

Pour changer la dateTime au fuseau horaire de l'utilisateur actuellement en visite, vous pouvez soit

Dans tous les cas, vous modifiez simplement les deux DateTimes sur ce fuseau horaire. Cela se fait facilement via setTimezone() .

Le $timeSinceAdded sera alors un DateInterval objet, que vous pouvez utiliser comme ceci

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

Veuillez vous référer aux liens pour plus de détails, par exemple sur les modificateurs de format disponibles.