Wartości daty/godziny/daty/godziny są przechowywane w MySQL w miarę ich dostarczania. Tj. jeśli INSERT
ciąg 2012-04-17 12:03:23
na DATETIME
kolumna, to jest wartość, która będzie przechowywana. Zostanie ona wewnętrznie przekonwertowana na znacznik czasu, który może być dokładny lub nie (patrz poniżej), ale gdy ponownie zapytasz o wartość, otrzymasz tę samą wartość z powrotem; podróż w obie strony jest przezroczysta.
Jeśli spróbujesz wykonać obliczenia czasu w SQL, mogą wystąpić problemy. Tj. każda operacja, która wymaga, aby SQL uwzględniał strefę czasową i/lub czas serwera. Na przykład za pomocą NOW()
. W przypadku każdej z tych operacji strefa czasowa i/lub czas serwera powinna być prawidłowo ustawione. Zobacz Problemy ze strefą czasową
.
Jeśli to Cię nie dotyczy i musisz tylko wykonywać obliczenia w PHP, musisz tylko upewnić się, że wiesz, z której strefy czasowej chcesz przekonwertować strefę czasową. W tym celu może wygodnie jest ujednolicić wszystkie czasy do UTC, ale nie jest to konieczne, ponieważ konwersje stref czasowych z dowolnej strefy czasowej na dowolną inną strefę czasową działają równie dobrze, o ile masz jasność co do strefy czasowej, z której i do której dokonujesz konwersji.
date_default_timezone_set('Asia/Tokyo'); // your reference timezone here
$date = date('Y-m-d H:i:s');
/* INSERT $date INTO database */;
$date = /* SELECT date FROM database */;
$usersTimezone = new DateTimeZone('America/Vancouver');
$l10nDate = new DateTime($date);
$l10nDate->setTimeZone($usersTimezone);
echo $l10nDate->format('Y-m-d H:i:s');