Ter*_*ich 13 php mysql timezone datetime timezone-offset
所以我有一个带注释功能的站点,其中注释的时间戳存储在MySQL数据库中.据我所知,时间戳在存储时转换为UTC,然后在检索时转换回默认时区.就我而言,我的服务器处于中央夏令时时区(CDT).
我计划通过报名表从每个用户获取时区.我只是想知道如何将TIMESTAMP值转换为用户的时区.
$userTimezone = new DateTimeZone($userSubmittedTimezoneString); $myDateTime = new DateTime($storedTimestamp, $userTimezone);
......还是不正确?
dec*_*eze 20
日期/时间/日期时间值在您提供时存储在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');
Run Code Online (Sandbox Code Playgroud)