URL-адрес ICS выводится с опозданием на 5 часов

Начну с того, что я не PHP-разработчик. Поэтому я попросил другого разработчика создать плагин, который берет время начала и окончания из плагина Wordpress CalendarizeIt и выводит его в отформатированный URL-адрес ICS. Проблема в том, что URL-адрес выводит время начала и окончания на 5 часов раньше, чем должно.

Вот плагин PHP:

<?php
// Original script from http://jamiebicknell.tumblr.com/post/413492676/ics-generator-php-class#_=_
// Modified by Sean Carruthers

$start          = $_GET['start'];
$end            = $_GET['end'];
$name           = $_GET['name'];
$description    = $_GET['description'];
$location       = $_GET['location'];
$uid            = "kaneko" . strtotime("now");

$data = "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nMETHOD:PUBLISH\r\nBEGIN:VEVENT\r\nDTSTART:".date("Ymd\THis\Z",$start)."\r\nDTEND:".date("Ymd\THis\Z",$end)."\r\nLOCATION:".$location."\r\nTRANSP: OPAQUE\r\nSEQUENCE:0\r\nUID:".$uid."\r\nDTSTAMP:".date("Ymd\THis\Z")."\r\nSUMMARY:".$name."\r\nDESCRIPTION:".$description."\r\nPRIORITY:1\r\nCLASS:PUBLIC\r\nEND:VEVENT\r\nEND:VCALENDAR";

header("Content-type:text/calendar; charset=utf-8");
header('Content-Disposition: inline; filename="'.$name.'.ics"');
echo $data;
?>

Затем в файле темы Wordpress:

<?php

$start_date = get_post_meta($post->ID, "fc_start", true);
$c_start_date = date("M j, Y",strtotime($start_date));

$end_date = get_post_meta($post->ID, "fc_end", true);
$c_end_date = date("M j, Y",strtotime($end_date));

$start_time = get_post_meta($post->ID, "fc_start_time", true);
$end_time = get_post_meta($post->ID, "fc_end_time", true);

$ics_args['start'] = strtotime($start_date . " " . $start_time);
$ics_args['end'] = strtotime($end_date . " " . $end_time);

$ics_args['name'] = get_the_title();
$ics_args['description'] = get_the_content();

$ics_args['location'] = get_post_meta($post->ID, "location", true);

$ics_url = plugins_url('kaneko/calendarize-it-mods/ics_event.php') . "?";
foreach($ics_args as $key => $value) {
   $ics_url .= "$key=$value&";
}

if($c_start_date == $c_end_date) {
   echo $c_start_date;
} else {
   echo $c_start_date . " - <br />" . $c_end_date;
}

?>

И, наконец, переменная $ics_url отображается в теге привязки следующим образом:

<a href="<?php echo $ics_url; ?>">

Я попытался изменить strtotime в переменной $uid плагина на что-то вроде +5 hours, но это не работает.

Любая помощь будет принята с благодарностью.

О, и я также играл с изменением часового пояса в настройках Wordpress. В настоящее время он установлен на UTC-5, поэтому я подумал, что изменение его на Чикаго поможет, но это тоже не помогло.


person Trevan Hetzel    schedule 07.08.2013    source источник


Ответы (1)


В строке ниже добавьте X-WR-TIMEZONE:America/New_York

$data = "НАЧАЛО:VCALENDAR\r\nВЕРСИЯ:2.0\r\nМЕТОД:ПУБЛИКАЦИЯ\r\nX-WR-TIMEZONE:America/New_York\r\n

ОБНОВЛЕНИЕ: я обновил всю строку кода, используя DTSTART;VALUE=DATE: без Z и то же самое для DTEND

$data = "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nMETHOD:PUBLISH\r\nX-WR-TIMEZONE:America/New_York\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:".date("Ymd\THis",$start)."\r\nDTEND;VALUE=DATE:".date("Ymd\THis",$end)."\r\nLOCATION:".$location."\r\nTRANSP: OPAQUE\r\nSEQUENCE:0\r\nUID:".$uid."\r\nDTSTAMP:".date("Ymd\THis\Z")."\r\nSUMMARY:".$name."\r\nDESCRIPTION:".$description."\r\nPRIORITY:1\r\nCLASS:PUBLIC\r\nEND:VEVENT\r\nEND:VCALENDAR";
person cmorrissey    schedule 07.08.2013
comment
Спасибо за быстрый ответ. Это, похоже, не сработало. - person Trevan Hetzel; 07.08.2013
comment
Можете ли вы предоставить нам вывод из вашего фида? - person cmorrissey; 07.08.2013
comment
Конечно: http://thekaneko.org/wp-content/plugins/kaneko/calendarize-it-mods/ics_event.php?start=1376388000&end=1376409600&name=The%20Millennial%20Trains%20Project&description=&location=KANEKO%20|%201111%20Jones%20St& - person Trevan Hetzel; 07.08.2013
comment
Я обновил ответ выше, попробуйте новую строку, которую я вам дал - person cmorrissey; 07.08.2013