Em vez de brincar com fusos horários, por que não apenas fazer
ALTER TABLE `your_table`
CHANGE `date_added` `date_added`
TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
Isso vai mudar sua coluna de uma coluna DATE para uma coluna TIMESTAMP , convertendo todas as datas em seus respectivos timestamps UTC no processo.
Quando uma nova linha é inserida, ela usará o timestamp atual como valor . Os carimbos de data/hora estão sempre em UTC, portanto, você não precisa alterar o fuso horário em seu servidor MySql, nem fornecer a data ao inserir uma nova linha.
Se você não pode ou não quer alterar suas colunas, você também pode selecionar o timestamp via
SELECT UNIX_TIMESTAMP('date_added') FROM your_table;
Para o seu TimeAgo, você pode fazer
$now = new DateTime;
$dateAdded = new DateTime("@$yourTimestampFromDb");
$dateAdded->setTimezone($now->getTimezone());
$timeSinceAdded = $dateAdded->diff($now);
Quando você fornece um carimbo de data/hora para DateTime, ele sempre usará UTC, independentemente do fuso horário do servidor padrão. Conseqüentemente, você deve converter
$dateAdded
para o fuso horário padrão (como mostrado acima) ou converta $timeSinceAdded
para UTC. Para alterar o dateTime para o fuso horário do usuário que está visitando, você
- precisa ter essas informações em seu banco de dados, por exemplo porque você está solicitando aos usuários registrados que forneçam essas informações
- ou você o determina em tempo de execução, geralmente fazendo uma pesquisa GeoIP em o IP do usuário visitante ou enviando o DateTime Offset do navegador do usuário.
De qualquer forma, basta alterar os dois DateTimes para esse fuso horário. Isso é feito facilmente via
setTimezone()
.
O
$timeSinceAdded
será então um DateInterval
objeto, que você pode usar assim
echo $timeSinceAdded->format('%a total days');
Consulte os links para obter mais detalhes, por exemplo, sobre os modificadores de formato disponíveis.