2013-04-02 62 views
1

我正在嘗試將Google日曆集成到我的某個應用中。Google日曆API夏令時問題(時區)

我一直在關注一個有用的教程,但一直告訴Google正確的時間停滯不前。

當我添加一個約會時,我使用這個時間戳格式。

日期時間時區 2013-04-02T18:00:00.000 + 00:00

現在,這似乎從我除了工作,可以看到它增加一個小時當前夏令時。我如何過來或使用PHP來爲我生成正確的日期格式。

任何幫助或指南,我可以閱讀的鏈接將是偉大的,我能找到的所有關於人們遇到重複日期時間的問題。

這是添加和預約我JSON代碼,

$date = '2013-04-02'; 
     $starttime = '18:00'; 
     $endtime = '20:00'; 

{ 
     "start": { 
      "dateTime": "{$date}T{$starttime}:00.000+00:00" 
     }, 
     "end": { 
      "dateTime": "{$date}T{$endtime}:00.000+00:00" 
     }, 
     "summary": "$title", 
     "description": "$title" 
     } 
+1

如果您使用_actual_時區在傳遞時間戳值,它會自動工作的罰款。 – CBroe

+0

在將呼叫發送給API之前是否添加了額外的小時,或者是否在發送時間戳小於所記錄時間的小時的呼叫後顯示?此外,您可以提供的任何代碼/ php日期時間設置將會很有幫助。 – jimcavoli

+0

我已經添加了我使用的json代碼。 –

回答

0

時間戳的+00:00部分是GMT的時區偏移,在這裏,它被設置爲「加零」,或在人,「我時區是GMT「。如果距格林威治標準時間1小時,則需要將此部分分別更改爲+01:00-01:00,具體取決於您提前一小時還是之後的GMT時間。如果你願意,你也可以得到UTC Offset in PHP

或者,您可以將所有內容都轉換爲GMT日期/時間,但這需要更多的工作,並且內置時區支持,使用起來更加方便。

0

我希望有人會發現我的解決方案有用。在我們切換到/從GMT格式時,使用Google Calendar API插入事件時遇到問題。

我使用的是DateTime及其常量RFC3339。 RFC3339格式包含時間偏移(如+01:00)。這可能會導致Google Calendar API出現問題,因爲一旦指定了dateTime屬性,Calendar就會絕對忽略timeZone屬性中的值。

對我來說唯一的解決方案就是停止使用具有時間偏移的RFC3339格式。現在我使用以下(RFC3339)DateTime格式:Y-m-d\TH:i:s(注意最後缺少的P屬性,RFC3339:Y-m-d\TH:i:sP)。

然後您必須指定timeZone屬性。例如'歐洲/布拉格'。

最後我的代碼看起來是這樣的:

$atts['summary'] = $this->title; 
$atts['location'] = $this->location; 
$atts['description'] = $this->description; 
$atts['start']['dateTime'] = $this->start->format("Y-m-d\TH:i:s"); 
$atts['start']['timeZone'] = $this->timeZone; //"Europe/Prague" 
$atts['end']['dateTime'] = $this->end->format("Y-m-d\TH:i:s"); 
$atts['end']['timeZone'] = $this->timeZone; //"Europe/Prague"