Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso inserir em tempo real de um evento no banco de dados usando php mysqli?


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ê

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.