3

わかりました。ICS パーサー ユーティリティを使用して、Google カレンダーの ICS ファイルを解析しています。グーグルがUCTでのイベントの時間を私に与えていることを除けば、それはうまく機能します..そのため、今5時間、夏時間の6時間を差し引く必要があります。

私が使用している開始時刻を取得するには:

$timestart = date("g:iA",strtotime(substr($event['DTSTART'], 9, -3)));
//$event['DTSTART'] feeds me back the date in ICS format: 20100406T200000Z

タイムゾーンと夏時間を処理する方法について何か提案はありますか?

前もって感謝します

4

2 に答える 2

8

コードのsubstr()部分は使用しないでください。strtotimeは、yyyymmddThhiissZフォーマットされた文字列を解析し、Zをtimezone=utcとして解釈できます。

例えば

$event = array('DTSTART'=>'20100406T200000Z');
$ts = strtotime($event['DTSTART']);

date_default_timezone_set('Europe/Berlin');
echo date(DateTime::RFC1123, $ts), "\n";

date_default_timezone_set('America/New_York');
echo date(DateTime::RFC1123, $ts), "\n";

プリント

Tue, 06 Apr 2010 22:00:00 +0200
Tue, 06 Apr 2010 16:00:00 -0400

編集:またはDateTimeクラスとDateTimezoneクラスを使用ます

$event = array('DTSTART'=>'20100406T200000Z');
$dt = new DateTime($event['DTSTART']);

$dt->setTimeZone( new DateTimezone('Europe/Berlin') );
echo $dt->format(DateTime::RFC1123), "\n";

$dt->setTimeZone( new DateTimezone('America/New_York') );
echo $dt->format(DateTime::RFC1123), "\n";

(出力は同じです)

于 2010-04-09T15:28:07.583 に答える
0

タイムゾーン ロケールを設定している場合は、現在のタイムゾーンを返す date("T") を使用することもできます。

echo date("T");

私たちは夏時間であるため、(私のタイムゾーンでは) EDT を返します。

次に、それを IF ステートメントで使用して、タイムゾーン調整を調整できます。

if (date("T") == 'EDT')
  $adjust = 6;
else
  $adjust = 5;
于 2010-04-09T15:32:27.250 に答える