1

PHPスクリプトから送信された時間をMySQLに保存しますCURRENT_TIMESTAMP. これにより、間違ったタイムゾーンから時間が作成され、現在地から 1 時間マイナスされます。私はスーパーユーザーではないので、うまくSET GLOBAL time_zone = 'Europe/London';いきません。入力または出力クエリを変更して 1 時間を補正する方法はありますか?

これは、フォームから送信された現在の SQL クエリです。

REPLACE INTO `order_admin_message` (`order_id`, `message`, `date_updated`)
VALUES ('$number', '$msg', CURRENT_TIMESTAMP)

そして、次を使用して取得します。

SELECT order_admin_message.message, order_admin_message.date_updated
FROM order_admin_message
WHERE order_admin_message.order_id = $number

編集: 明確にするために、ユーザーの時間を表示したくありません。ロンドンの現地時間だけを表示します (夏の夏時間を考慮に入れます)。EDIT 2:件名を質問/回答に近づけるように変更しました。

4

3 に答える 3

2

PHP では、表示用に変更するだけです。ロケールに依存する日付または時刻をデータベースに保存しないでください。後で変換、PITA を作成します。ユーザーを気にしなくても、必要な時間/タイムゾーンを表示するだけです。

$tz = new DateTimeZone('Europe/London');

$datetime_updated = new DateTime($results['order_admin_message.date_updated']);
$datetime_updated->setTimezone($tz);
$display_date = $datetime_updated->format("M j, Y g:i A");

echo $display_date;
于 2012-10-11T18:46:25.570 に答える
0

CONVERT_TZ()次の関数 を使用します:http: //dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_convert-tz

于 2012-10-11T18:34:53.400 に答える
0

代わりに使用utc_timestampし、ユーザー自身のタイムゾーンに変換してください。

UTC_TIMESTAMP は、世界中で認識されている現在の UTC 日時です。

ユーザーの現在地とタイムゾーンがわかっている限り、正しいオフセットを追加することで変換できます。

ユーザーが希望するタイムゾーンがわからない場合は、別の問題があります。基本的には、どうにかして調べる必要があります。

于 2012-10-11T14:47:37.117 に答える