Zend Google Calendar API - Как изменить формат даты и времени? - PullRequest
1 голос
/ 09 января 2012

Я использую данные Zend Framework для API Календаря Google и выходные данные даты и времени в RFC3339 (который выглядит следующим образом: 2012-01-19T22: 00: 00.000-08: 00). Какой php-код мне нужно добавить, чтобы преобразовать его в UTC, чтобы он выглядел так: 19 января 2012 г., 20:00 - 11:00? Я нашел php-код, который преобразует даты RFC в строку, но я не знаю достаточно о php, чтобы можно было изменить код для работы с формулами Zend Gdata ... как вы увидите в моем коде ниже, «date» "называется" когда "... поэтому любой код должен каким-то образом соединить эти два ... любая помощь приветствуется!

<?php
$path = '/home/ZendGdata/library';
$oldPath = set_include_path(get_include_path() . PATH_SEPARATOR . $path);

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');

// User whose calendars you want to access
$user = 'my@email.com';
$pass = 'mypassword';
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; // predefined service name for calendar

$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
$service = new Zend_Gdata_Calendar($client);

$query = $service->newEventQuery();
// Set different query parameters
$query->setUser('mycalendarID');
$query->setVisibility('private');
$query->setProjection('full');
$query->setOrderby('starttime');
// Start date from where to get the events
$query->setStartMin('2012-01-01');
// End date
$query->setStartMax('2050-03-15');


// Get the event list
try {
    $eventFeed = $service->getCalendarEventFeed($query);
} catch (Zend_Gdata_App_Exception $e) {
    echo "Error: " . $e->getMessage();
}
echo "<ul>";
foreach ($eventFeed as $event) {
echo "<tr>";
    foreach ($event->when as $when) {
      echo "<td>" . $when->startTime . "</td>";
    }
    echo "<td>" . $event->content . " </td>";
    $where=$event->Where;
    foreach($where as $eventplace)
    {
        echo "<td>" . $eventplace . " </td>";
    }

}
echo "</tr>";
echo "</ul>";
?>

Спасибо за эту информацию @ vascowhite.

Два выпуска:

  1. Выход получился так: строка (23) «20 января 2012 года: 06:00»

  2. Я извлекаю эту информацию из моего календаря Google, и она выводится на мою HTML-страницу ... Я не создаю новые события через этот php ... поэтому этот код просто преобразовал дату, которую вы написали , она не конвертировала мою дату в календаре Google, полученную из этого кода:

foreach ($event->when as $when) { echo "<td>" . $when->startTime . "</td>"; }

Вы знаете, как это сделать?

Спасибо, Susan

1 Ответ

3 голосов
/ 09 января 2012

Вы можете использовать PHP DateTime класс, чтобы сделать это довольно легко.

Сначала создайте объект DateTime из строки времени: -

$timestr = '2012-01-19T22:00:00.000-08:00';
$date = new DateTime($timestr);

Этот объект находится в правильном часовом поясе из-за части '-08: 00' строки. Теперь решите, в какой часовой пояс вы хотите конвертировать, и создайте объект DateTimeZone (я выбрал UTC, как вы это конкретно упомянули): -

$tz = new DateTimeZone('UTC');
$date->setTimezone($tz);

Ваш объект DateTime теперь преобразован в часовой пояс UTC.
Вы можете получить его в желаемом формате, используя DateTime :: format () метод: -

var_dump($date->format('d F  Y: H:i'));

Выход:

20 января 2012 года: 06:00

Чтобы вписаться в ваш код: -

foreach ($event->when as $when) {
  $date = new DateTime($when->startTime);
  echo "<td>" . $date->format('d F  Y: H:i') . "</td>";
}
...