1

私がやりたいのは、時間文字列を strtotime で変換してから、以前のタイムゾーンで日付に戻すことです。

次のコードを使用していますが、結果として得られる時間は UTC です。

$timeStart = "2013-04-25 18:14:00+03";
$datetimeStart = strtotime($timeStart);
$datetimeNext = strtotime('+8 hours',$datetimeStart);
$time = gmdate('Y-m-d\\TH:i:s\\Z', $datetimeNext);

何か案は?ありがとうございました..

4

3 に答える 3

1

もともと持っていたのと同じオフセットが欲しいということだと思います。TimeZone タグ wikiで「TimeZone != Offset」を読んでください。

リクエストの主な問題は、 ( docsstrtotimeによると) UTCのエポックからの秒数を表す整数を返すことです。したがって、提供するオフセットは考慮されますが、その後は忘れられます。

申し訳ありませんが、コード サンプルを提供できるほど PHP についてよく知りませんが、おそらく元の文字列からオフセットを抽出し、最後に再適用することができます。オフセットを維持するオブジェクトを生成する文字列を解析する別の方法がある可能性もあります。繰り返しますが、私はここであなたを助けるのに十分なほど PHP を知りません。DateTimeOffset.Net では、同じ問題はではなく に解析することで解決されますDateTime

また、論理的には、最初に開始したオフセットが、時間を追加した後に使用する正しいオフセットであるとは限りません。夏時間への移行を超えた可能性があります。これにより、新しい正しいオフセットが元のオフセットよりも 1 時間短くなったり、1 時間長くなったりします。懸念事項に応じて、これを気にする場合と気にしない場合があります。編集後に正しいオフセットを取得する唯一の方法は、元の値がどのタイム ゾーンにあったかを知ることです。

于 2013-04-25T20:59:29.567 に答える
1

date代わりに使用する必要がありますgmdate

$time = date('Y-m-d\\TH:i:s\\Z', $datetimeNext);
于 2013-04-25T15:41:42.077 に答える