Как получить метку времени из строки даты с часовым поясом, PHP?

0

Я хочу создать начальное и конечное время ics (UTC) с таким форматом, как:

DTSTART:20141107T110000Z
DTEND:20141107T120000Z

У меня есть следующий объект:

"event": {
    "timezone": "GMT+2",
    "start_time": "2014-11-07 13:00:00", // client local time
    "duration": 30
     },

 function _calc_end_date($start, $duration) {
    $start_date = new DateTime($start, new DateTimeZone('UTC'));
    $end_date = $start_date->add(new DateInterval('PT'.$duration.'M'));
    $end_date_str = $end_date->format('Y-m-d H:i:s');
    return $end_date_str;
 }

 private function dateToCal($timestamp) {
    return GMDATE("Ymd\THis\Z", $timestamp);
}

 $timezone  = $event['timezone']; // ????       
 $start = strtotime($event['start_time'] . " UTC");
 $end_date = $this->_calc_end_date($event['start_time'], $event['duration']);
 $end = strtotime($end_date . " UTC");

Поэтому я пишу:

"DTSTART:" . $this->dateToCal( $start ) . $eol .
"DTEND:" . $this->dateToCal( $end ) . $eol .

Этот код работает, но я получаю результат с разницей в 2 часа. Как вы можете заметить, я не ввел TimeZone, потому что я не знаю, как это сделать.

$timezone  = $event['timezone']; // 

Как-то мне нужно разобрать "GMT + 2" и рассчитать

$start = strtotime($event['start_time'] . " UTC");

с ТЗ.

Пожалуйста помоги,

Теги:
datetime

3 ответа

1
Лучший ответ
$date = DateTime::createFromFormat( "Y-m-d H:i:s O", $event['start_time'] . ' ' . $event['timezone'] );
$date->setTimezone( new DateTimeZone( 'GMT' ) );
$startDate = $date->format( "Ymd\THis\Z" );

$date->add( new DateInterval( 'PT' . $event['duration'] . 'M' ) );
$endDate = $date->format( "Ymd\THis\Z" );
0

Что такое имя часового пояса? Этот код работает для меня:

date_default_timezone_set('UTC');
echo date('Y-m-d H:i', strtotime("2014-11-07 13:00:00 Europe/Warsaw"));
0

Используйте подстроку и индекс для захвата всего после "+" и добавьте это количество часов к времени

Ещё вопросы

Сообщество Overcoder
Наверх
Меню