2011-04-15 123 views
4

我有PHP時間的事件的開始和結束時間。對於某些未來日期的開始和結束時間,這是一個簡單的<?php time(); ?>。我想知道是否有人知道採用數字格式(PHP時間())或代表該時間的某個字符串值(我可以執行strtotime($sometimevalue);)並將其轉換爲所需的Google日曆時間格式。PHP的時間()谷歌日曆日期時間格式

夠說話 - 這裏是時間格式的例子:

20150107T003000Z/20150107T023000Z 

這等同於2015年1月6日下午5:30至2015年1月6日下午7:30。

那麼有人可以向我解釋如何將time()翻譯成此格式?

+0

讓我困惑的事情是,事件發生在1月6日,但時間格式表示'20150107T'。我認爲它會是'20150106T'此外,下午5點30分到'023000Z'晚上7點30分是'003000Z'的時間。這很難讓我知道這些數字是從哪裏產生的。 – Michael 2011-04-15 01:15:19

回答

3

取自http://php.net/manual/en/function.date.php 的工作解決方案獲得Boris Korobkov。

// boris at psyonline dot ru 14-Jun-2007 03:05 

<?php 

/** 
* Get date in RFC3339 
* For example used in XML/Atom 
* 
* @param integer $timestamp 
* @return string date in RFC3339 
* @author Boris Korobkov 
*/ 
function date3339($timestamp=0) { 

    if (!$timestamp) { 
     $timestamp = time(); 
    } 
    $date = date('Y-m-d\TH:i:s', $timestamp); 

    $matches = array(); 
    if (preg_match('/^([\-+])(\d{2})(\d{2})$/', date('O', $timestamp), $matches)) { 
     $date .= $matches[1].$matches[2].':'.$matches[3]; 
    } else { 
     $date .= 'Z'; 
    } 
    return $date; 
} 

?> 

背景: 從 http://www.ibm.com/developerworks/opensource/library/os-php-xpath/ 只見 「的公佈和更新的元素使用RFC 3339時間戳格式。」

想通我應該谷歌「rfc3339 PHP」找到一個函數實現這種格式

5

嘗試這種情況:

date_default_timezone_set('UTC'); 
$date = date("Ymd\THis\Z"); 

第一行設置的默認時區使用是UTC(這是「Z」在格式化的時間結束:Z = "Zulu Time")。我之所以這麼做,是因爲我不知道Google是否期待UTC時間。如果您可以使用其他時區,那麼您可以使用one of the other timezone formats available

在下一行中,我使用date來格式化當前的Unix時間戳(當沒有時間戳傳遞給date時,它默認爲當前時間 - 即time())。我會打破它拆開給你:

  • Y - 四位數年份
  • m - 這兩個數字(包括前導零,如果必要的話)月
  • d - 兩位數(包括前導零(如有必要))月中的某天
  • \T - 文字字符T,它是標識日期的時間部分開始的分隔符。斜線是逃脫T,因爲它是否則用來顯示時區縮寫(例如,「PST」)
  • H - 兩位數(包括前導零,如果必要的話)小時
  • i - 雙所述位(包括前導零,如果必要的話)分鐘
  • s - 兩位數(包括前導零,如果必要的話)第二
  • \Z - 的文字字符Z,說明如以上所討論祖魯時間。斜線是爲了逃避T,因爲它用於顯示UTC以秒爲單位的時區。

參考,以確保我準確地解釋這個問題,這個代碼:

date_default_timezone_set('UTC'); 
echo date("Ymd\THis\Z", time()); 

目前顯示這樣的結果:

20110415T014623Z 

我要指出,你也可以使用gmdate()代替date(),並且不需要date_default_timezone_set()呼叫,因爲gmdate()以GMT格式返回結果。我只是毫不猶豫地提及這一點,因爲我從來沒有100%清楚過GMT與UTC之間的差異,尤其是與其他時區/時期如BST(英國夏令時)以及它們如何改變GMT(如果有的話)。如果有人能夠在評論中澄清這一點,我會非常感激。

+0

你可以在這裏忽略'time()'的調用。 – deceze 2011-04-15 01:58:22

+0

@deceze - 你是對的。如果省略第二個參數,則「日期」默認爲當前日期/時間。我在那裏測試了一個字符串值,當我改變它時,我想我有一個腦袋。謝謝,我會更新答案。 – AgentConundrum 2011-04-15 02:01:39

+0

嗯。我喜歡這個。我目前正在使用我在google上發現的一個JavaScript實現。我可以試試這個來驗證它的工作:) – Michael 2011-04-15 20:50:33

1

這是有點老,但谷歌希望得到的時間在ISO 8601實例:

$objDateTime = new DateTime('NOW'); 
$isoDate = $objDateTime->format(DateTime::ISO8601); 

SOURCE

+0

謝天謝地,我已經從編程的PHP :)開始了。但謝謝你的答案。 – Michael 2016-11-03 17:41:24