2

サーバーとMySQLデータベースのデフォルトのタイムゾーンはGMTに設定されています。私のPHPコードは、表示される日付をユーザーのローカルタイムゾーン(この場合は東部)に変換します。

$OPENED_DATE = '2013-03-20 21:05:00'
$OPENED_DATE = new DateTime($OPENED_DATE);
$OPENED_DATE->setTimeZone(new DateTimeZone('America/New_York'));

次に、ユーザーの日付を出力します。

$OPENED_DATE = strtotime($OPENED_DATE->format('Y-m-d H:i:s'));      
$OPENED_DATE = date('F j, Y g:i A T', $OPENED_DATE);

$ OPENED_DATEの出力:2013年3月20日17:05 GMT

実際の時刻は正しく表示されますが、日付出力の「T」は引き続きGMTを表示しています。GMTのデフォルトではなく、変換したタイムゾーンを表示する方法はありますか?これを行うために私が知っている唯一の方法は、date_default_timezone_set毎回ユーザーのタイムゾーンに切り替えてからGMTに戻すことです。しかし、もっと効率的な方法が必要だと思います...

ありがとうございました!

4

2 に答える 2

1

これらの2つの回線は冗長です

$OPENED_DATE = strtotime($OPENED_DATE->format('Y-m-d H:i:s'));      
$OPENED_DATE = date('F j, Y g:i A T', $OPENED_DATE);

date()間違ったタイムゾーンを出力しているのは呼び出しです。

試してみませんか:

$OPENED_DATE = $OPENED_DATE->format('F j, Y g:i A T');

DateTimeオブジェクトにはタイムゾーンが設定されていますが、タイムスタンプに変換して使用するとdate()、サーバーのタイムゾーンがその時間に使用されます。日付をフォーマットするためにDateTimeオブジェクトを使用するだけで、やりたいことができると思います。

于 2013-03-20T22:58:58.190 に答える
1

タイムゾーン設定を$OPENED_DATE変数にのみ適用したため、関数strtotime()date()関数は同じタイムゾーン情報を受け取りません。

から年/月/日/時/分/セクションのみを通過している$OPENED_DATEためstrtotime()、タイムゾーン情報を取得する方法はありません。

ここでできるstrtotime()ことは、などの関数にdate()使用されるデフォルトのタイムゾーンを設定することですdate_default_timezone_set()

ただし、これはまだ面倒であり、その必要はありません。すでにDateTimeオブジェクトがあり、それを引き続き使用することもできます。

DateTimeオブジェクトを使用すると、フォーマットされた時刻を直接出力できます。

$OPENED_DATE->format('F j, Y g:i A T');

strtotime()したがって、とdate()ステップを完全にスキップします。

于 2013-03-20T23:00:07.993 に答える