sql >> Databasteknik >  >> RDS >> Mysql

Webb- och databasserverinställningar för att få rätt UTC-tidszon

Om du begränsar dig till MySQLs DATE- och DATETIME-typer kan du i stort sett ignorera tidszonsproblem i själva MySQL. Du vill undvika MySQL:s TIMESTAMP-typ eftersom:

När det gäller att läsa/skriva DATETIME-värden så får du tillbaka exakt vad du lagt in, vilket är bra.

Det lämnar dig med problemet att alltid se till att du skriver UTC-värden till databasen.

Det bästa sättet att säkerställa att PHP använder UTC är att uttryckligen ställa in det i din applikation med date_default_timezone_set() . Det säkerställer att anrop som date('Y-m-d H:i:s') ger dig UTC-värdet. Det kommer också att säkerställa att något som (new \DateTime('now'))->getTimezone() returnerar en UTC \DateTimeZone-instans.

Du bör förstås notera att saker och ting blir betydligt svårare när du lagrar datum/tidsvärden som du tar från användare. I dessa fall måste du på något sätt bestämma vilken tidszon användaren befinner sig i och hantera konverteringen till UTC innan du behåller värdena. Förutsatt att dina användare har någon tidszonsinställning per användare, gör du i princip något som:

/** @var \DateTimeZone $userTZ */
$userTz = getUserTimezone();
$dateTime = new \DateTime($user_submitted_date_string, $userTz);
$dateTime->setTimezone(new \DateTime('UTC'));
$dateTimeStr = $dateTime->format('Y-m-d H:i:s');


  1. PostgreSQL:Gruppering och filtreringstabell, med villkor för att det inte finns

  2. Migrera mySQL till Firebase

  3. SPSS och PHP/MySQL-integration

  4. Konvertera mysql TIME från 24 HR till AM/PM-format