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
- besoin d'avoir ces informations dans votre base de données, par ex. parce que vous demandez aux utilisateurs enregistrés de fournir ces informations
- ou vous le déterminez au moment de l'exécution, généralement en effectuant une recherche GeoIP sur l'adresse IP de l'utilisateur visiteur ou en envoyant le décalage DateTime depuis le navigateur de l'utilisateur.
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.