sql >> Databáze >  >> RDS >> Mysql

Jak mohu vložit skutečný čas události do databáze pomocí php mysqli?

Místo toho, abyste si pohrávali s časovými pásmy, proč to prostě neudělat

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

To se změní váš sloupec ze sloupce DATE do sloupce TIMESTAMP , čímž se všechna data v procesu převedou na jejich příslušná časová razítka UTC.

Když je vložen nový řádek, použije aktuální časové razítko jako hodnotu . Časová razítka jsou vždy v UTC, takže nemusíte měnit časové pásmo na serveru MySql ani zadávat datum při vkládání nového řádku.

Pokud nemůžete nebo nechcete změnit své sloupce, můžete také vybrat časové razítko pomocí

SELECT UNIX_TIMESTAMP('date_added') FROM your_table;

Pro váš TimeAgo pak stačí udělat

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

Když do DateTime zadáte časové razítko, bude vždy používat UTC bez ohledu na výchozí časové pásmo vašeho serveru. Následně musíte buď převést $dateAdded na výchozí časové pásmo (jak je uvedeno výše) nebo převeďte $timeSinceAdded do UTC.

Chcete-li změnit datum a čas na časové pásmo aktuálně navštěvujícího uživatele, buď

V každém případě pak stačí změnit oba DateTimes na toto časové pásmo. To lze snadno provést pomocí setTimezone() .

$timeSinceAdded bude pak DateInterval objekt, který můžete použít takto

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

Další podrobnosti, například o dostupných modifikátorech formátu, naleznete v odkazech.



  1. Jak se ujistit, že v databázi MySQL není při inkrementaci pole žádný spor?

  2. Jak definovat primární klíč automatického zvýšení v Oracle

  3. Jak načtu Individual Div bez načtení celé stránky a zobrazení stavu načítání?

  4. Jak používat kontejner PostgreSQL se stávajícími daty?