1

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 でテストしましたが、おそらく結果はサーバーの構成によって異なります。

4

3 に答える 3

2

現在のユーザーのタイムゾーンは date_default_timezone_set() で設定されています。GMT +- 時刻を取得するにはどうすればよいですか?

できません。夏時間の変動により、オフセットは一定ではなく、日付によって変わる可能性があります。

gmmktime()(少しの文字列解析と一緒に) を使用して、GMT 日付/時刻を UNIX タイムスタンプに変換し、 を使用しdate()てそれを現在のタイム ゾーンで表示します。

于 2012-11-26T07:03:41.907 に答える
1

間違っている場合は、反対票を投じないでください:)

クライアント ブラウザでタイムゾーン時刻を取得して差を確認し、差がある場合は、クライアントの場所に応じてこの差の値を加算または減算します。

于 2012-11-26T06:34:00.327 に答える
1

日付値の値を UNIX タイムスタンプとして JavaScript に渡すだけです。たとえば、AJAX を使用すると、次のようになります。

echo json_encode(array(
    'time' => strtotime($row['msg_time']),
    'msg' => 'hello world',
));

次に、Date()それをユーザーの現地時間に変換するために使用します。

var msgTime = new Date(data.time * 1000);
于 2012-11-26T07:07:44.390 に答える