Управление часовым поясом в php с форматом даты / времени ics - PullRequest
3 голосов
/ 09 апреля 2010

Хорошо, я использую утилиту парсера ICS для анализа файлов ICS календаря Google. Он отлично работает, за исключением того, что Google сообщает мне время событий в UCT ... поэтому мне нужно вычесть 5 часов сейчас и 6 часов, когда происходит переход на летнее время.

Чтобы узнать время начала, я использую:

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

Итак, есть ли предложения, как обращаться с часовым поясом и летним временем?

Заранее спасибо

Ответы [ 2 ]

8 голосов
/ 09 апреля 2010

Только не используйте часть кода 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";

(вывод такой же)

0 голосов
/ 09 апреля 2010

Если вы установили свой часовой пояс, вы также можете использовать дату («T»), которая будет возвращать текущий часовой пояс.

echo date("T");

Поскольку мы находимся в летнее время, (в моем часовом поясе) он возвращает: EDT

Тогда вы можете использовать это в операторе IF, чтобы скорректировать настройку часового пояса.

if (date("T") == 'EDT')
  $adjust = 6;
else
  $adjust = 5;
...