DATETIME 列を使用してデータベースにユーザー メッセージを保存しています。データベースは GMT+0 を使用しているため、さまざまな国のユーザーにメッセージの送信時刻を表示する必要があります。取得した時刻をユーザーのタイムゾーンに調整する必要があります。
現在のユーザーのタイムゾーンは date_default_timezone_set() で設定されています。GMT +- 時刻を取得するにはどうすればよいですか?
編集
@doniyor のアイデアに従って、これは私がやったことです:
// Get server hour
$localtime = localtime();
$serverHour = $localtime[2]; # The server's timezone is used by default before defining one
// Set timezone
date_default_timezone_set('user's timezone goes here');
// Get user hour
$localtime = localtime(); # Now localtime gives the user's time since timezone has been changed
$userHour = $localtime[2];
$timeAdjustment = $userHour - $serverHour < -12 ? 24 + $userHour - $serverHour : $userHour - $serverHour; // Calculate hours to add to rows got from db to match user's time
// Example of a row adjusted to match user's time
$adjustTime = ($userHour - $serverHour < -12 ? 24 + $userHour - $serverHour : ($userHour - $serverHour > 12 ? $userHour - $serverHour - 24 : $userHour - $serverHour)*60*60; // strtotime is in seconds so $timeAdjustment needs *60*60 to convert to seconds too
これを PHP5+Apache でテストしましたが、おそらく結果はサーバーの構成によって異なります。