1

我将 Zend Framework Gdata 用于 Google 日历 API 和 RFC3339 中的日期时间输出(如下所示:2012-01-19T22:00:00.000-08:00)。我需要添加什么 php 代码才能将其转换为 UTC,使其看起来像这样:2012 年 1 月 19 日 8pm-11pm ?我找到了将 RFC 日期转换为字符串的 php 代码,但我对 php 的了解还不够,无法更改代码以使用 Zend Gdata 公式……正如您将在下面的代码中看到的那样,“日期“ 被称为“何时”......所以任何代码都必须以某种方式连接这两个......任何帮助表示赞赏!

<?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. 输出结果如下: string(23) "20 January 2012: 06:00"

  2. 我正在从我的谷歌日历中提取此信息,并将其输出到我的 html 页面中...我不是通过此 php 创建新事件...所以此代码只是转换了您编写的日期,它没有转换我的谷歌日历事件日期是从这段代码中提取的:

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

你知道怎么做吗?

谢谢你,苏珊

4

1 回答 1

3

您可以使用 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'));

输出:

2012 年 1 月 20 日:06:00

要适合您的代码:-

foreach ($event->when as $when) {
  $date = new DateTime($when->startTime);
  echo "<td>" . $date->format('d F  Y: H:i') . "</td>";
}
于 2012-01-09T13:31:37.897 回答