私はカレンダーアプリケーションに取り組んでいます。このユーザーでは、異なるタイムゾーンのユーザーがイベントを作成/表示します。以下の方法に従って、UTCでイベント時間を節約し、ユーザーのローカル時間で表示することを考えています。注:ユーザーは自分の好みのタイムゾーン設定を持っています。
イベントの開始時刻をUTCタイムスタンプとして保存するには:
$timezone = new DateTimeZone( $user_timezone_name );
$utcOffset = $timezone->getOffset( new DateTime( $event_start_time_string_local ) );
$event_start_timestamp_local = maketime( $event_start_time_string_local );
//Now add/subtract $utcOffset to/from $event_start_timestamp_local to get event's start //time timestamp in UTC and save this result in DB.
ユーザーのタイムゾーンでイベントの開始時刻を取得するには:
date_default_timezone_set( $user_timezone_name );
$eventTimeLocalTime = date("Y-m-d H:i:s", $event_start_timestamp_in_UTC );
どこ:
user_timezone_name is user's timezone setting.
event_start_time_string_local is event's start time string in local/civil time.
event_start_timestamp_in_UTC is event's start time timestamp in UTC.
私の質問:
参照:- does-phps-date-default-timezone-set-adjust-to-daylight-saving - get-timezone-offset-for-a-given-location
これは複雑すぎます。 DateTime
を使用して2つのタイムゾーン間で変換するには、次のようにします。
date_default_timezone_set('Asia/Kolkata'); // YOUR timezone, of the server
$date = new DateTime($input, new DateTimeZone('Asia/Tokyo')); // USER's timezone
$date->setTimezone(new DateTimeZone('UTC'));
echo $date->format('Y-m-d H:i:s');
これにより、ユーザーのローカルタイムゾーンからUTCに変換されます。逆に、ユーザーのローカル時間で時刻を表示するには、2つのタイムゾーンを入れ替えます。
はい、PHPはDSTを処理します。必要な変換ルールはPHPインストールの一部です。PHPを更新するか、 timezonedbの更新: http://pecl.php.net/package/timezonedb 。
はい、php apiはDSTを考慮に入れます。ほとんどの場合、decezeが示した方法で時間変換を安全に実行できます。問題は、それが常に可能/実行可能であるとは限らない、または意味をなさないことです。以下の例を検討してください-ポーランド(2013年)の10月27日午前3時に時計を1時間戻し、標準時間(オフセットUTC + 01:00)に3月31日午前2時に時計を1時間進めて夏に切り替えます時間(オフセットUTC + 02:00)。 Grenwich/UTCでの「リアルタイム」の目盛りと、PHPによるヨーロッパ/ワルシャワからUTCへの変換)の仕組みを見てみましょう。
Europe/Warsaw time offset UTC php2utc conversion php offset
2013-10-27 01:00:00 +2 2013-10-26 23:00:00 2013-10-26 23:00:00 +2
2013-10-27 01:30:00 +2 2013-10-26 23:30:00 2013-10-26 23:30:00 +2
2013-10-27 02:00:00 +2 2013-10-27 00:00:00 2013-10-27 01:00:00 +1 *
2013-10-27 02:30:00 +2 2013-10-27 00:30:00 2013-10-27 01:30:00 +1 *
2013-10-27 02:59:00 +2 2013-10-27 00:59:00 2013-10-27 01:59:00 +1 *
3am -> 2am .....................................summer time changes to standard(winter) time @3am we subtract 1h so 3am becomes 2am
2013-10-27 02:00:00 +1 2013-10-27 01:00:00 2013-10-27 01:00:00 +1
2013-10-27 02:30:00 +1 2013-10-27 01:30:00 2013-10-27 01:30:00 +1
2013-10-27 03:00:00 +1 2013-10-27 02:00:00 2013-10-27 02:00:00 +1
2013-10-27 03:30:00 +1 2013-10-27 02:30:00 2013-10-27 02:30:00 +1
午前2時から午前3時の間にわかるように、方法はありませんPHPは「調整」の前後(調整前/調整後)の時間を知ることができるため、確実に変換できません。これが彼/彼女の誰かを助けることを願っています審議;-)