Стойностите за дата/час/дата и час се съхраняват в MySQL, когато ги предоставите. т.е. ако INSERT
низът 2012-04-17 12:03:23
в DATETIME
колона, това е стойността, която ще бъде съхранена. Тя ще бъде вътрешно преобразувана във времеви клеймо, което може да е или не е точно (вижте по-долу), но когато потърсите отново стойността, ще получите същата стойност обратно; двупосочното пътуване е прозрачно.
Може да възникнат проблеми, ако се опитате да правите времеви изчисления в SQL. т.е. всяка операция, която изисква SQL да вземе предвид часовата зона и/или времето на сървъра. Например, като използвате NOW()
. За която и да е от тези операции, часовата зона и/или времето на сървъра трябва бъде настроен правилно. Вижте Проблеми с часовата зона
.
Ако това не ви засяга и трябва да правите изчисления само в PHP, трябва само да сте сигурни, че знаете от коя часова зона в коя часова зона искате да преобразувате. За тази цел може бъде удобно да стандартизирате всички времена до UTC, но не е необходимо, тъй като преобразуването на часовата зона от всяка часова зона в която и да е друга часова зона работи също толкова добре, стига да сте наясно от коя часова зона и към коя часова зона преобразувате.
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');