2016-11-05 2 views
0

Почему следующие startTime и endTime в календаре Outlook и Mac не вставляются с точным временем, как показано ниже?iCaldendar - Как PHP применит часовой пояс, начало, время окончания правильно в файле ics?

Вход:

$timezone = 'Europe/Luxembourg'; 
$startTime = "2016-11-03 18:00:00";   
$endTime = "2016-11-03 19:00:00"; 

iCalender.ics:

$icalender_for_outlook_n_osx = 
    'BEGIN:VCALENDAR' . "\r\n" . 
    'VERSION:2.0'. "\r\n" . 
    'PRODID:-//hacksw/handcal//NONSGML v1.0//EN'. 
    'BEGIN:VEVENT'. "\r\n" . 
    'DTEND:' . date("Ymd\THis", strtotime($endTime)) . "\r\n" . 
    'UID:'. uniqid() . "@".$domain . "\r\n". 
    'DTSTAMP:'. time() . "\r\n". 
    'LOCATION:' . $location . "\r\n". 
    'DESCRIPTION:'. $uri . "\r\n" . 
    'URL;VALUE=URI:' . $uri . "\r\n" . 
    'SUMMARY:'. $subject . "\r\n" . 
    'DTSTART:'. date("Ymd\THis", strtotime($startTime)) . "\r\n" . 
    'PRIORITY:5'. "\r\n" .   
    'END:VEVENT'. "\r\n" . 
    'END:VCALENDAR'. "\r\n"; 

Перспективы или в Mac календарь начала и время окончания либо показывает несколько часов назад или вперед, никогда не получает значение, которое я имею встроенный. Как вы точно устанавливаете часовой пояс PHP и время начала/даты точно так же, как и при подаче заявки на ввод?

+0

Его аргумент 'strtotime()' анализирует метку времени как европейский формат даты 'd-m-y', когда используются' -'. Возможно, его просто лучше использовать 'date_create_from_format()' – Xorifelse

+0

, он правильно создал время: '20161106T001126Z', но когда я добавил к календарю, внутри календаря дата в порядке, но время показывает 01:11 ??? – YumYumYum

+0

Ну, если я выполняю 'echo date (« Ymd \ THis », strtotime (« 2016-11-03 18:00:00 »)),' он дает мне «20161103T180000», что кажется более правильным, 20161106', где 06 - неправильный день, а время '001126' - 0 часов, 11 минут и 26 секунд. – Xorifelse

ответ

1

Я твердо верю, что strtotime() следует избегать и создавать дату из формата.

$format = 'Y-m-d H:i:s'; 
$icalformat = 'Ymd\THis'; 
$startTime = '2016-11-03 18:00:00';   
$endTime = '2016-11-03 19:00:00'; 

echo DateTime::createFromFormat($format, $startTime)->format($icalformat); // 20161103T180000 
echo DateTime::createFromFormat($format, $endTime)->format($icalformat); // 20161103T190000 
Смежные вопросы