2011-11-23 129 views
1

我試圖把這種類型的日期格式:是否可以將正常日期轉換爲ISO 8601時間格式?

週四,2011年11月10日在下午10時37

爲ISO 8601格式(與PHP)。我怎樣才能做到這一點?我已經試過:

date("c", $row2['time']) 

很顯然,這是不正確的,因爲TIMEAGO jQuery插件是說「41年前」,這絕對不是41年前。

是不可能將這種日期轉換成ISO 8601格式?

我試圖尋找這一點,我還沒有找到如何把這種格式成爲ISO 8601

+0

您應該將其存儲爲UTC時間戳,以便您以此方式使用它。 – CommunistPancake

+0

jQuery?這與PHP有什麼關係? – mc10

+0

@ mc10 - 我正在使用jQuery插件將日期變成「3分鐘前」等,因此用戶更容易理解。但它必須採用ISO 8601格式才能正常工作。 – Nathan

回答

4

您可以使用DateTime對象,可能與DateTime::createFromFormat,或strtotime創建的任何解決方案:

<?php 
date_default_timezone_set('America/New_York'); 
$date = 'Thursday, November 10th, 2011 at 10:37 PM'; 
$date = str_replace('at', '', $date); 
echo date("c", strtotime($date)); 

Demo

編輯:下面是使用對象日期時間的例子。請注意,對於這兩個示例,您應該從valid timezone strings列表中設置一個正確的時區。

$date_obj = DateTime::createFromFormat('l, F jS, Y \at h:i A', 'Thursday, November 10th, 2011 at 10:37 PM', new DateTimeZone('America/New_York')); 
echo $date_obj->format('c'); 

Demo

+3

+1擊敗我的'createFromFormat()'示例 – Phil

+0

感謝您的詳細解答和演示:) – Nathan

+0

如果月份的數字沒有「th」,會發生什麼?它會繼續正常工作嗎? – Nathan

2

嘗試

$date = date('c', strtotime(str_replace(' at ', ' ', 'Thursday, November 10th, 2011 at 10:37 PM'))); 
echo $date; 

strtotime解析你的字符串,並將其轉換爲Unix時間戳。 date然後將您的日期格式化爲ISO 8601日期。

+2

這會爲我返回'1970-01-01T10:00:00 + 10:00'。 – F21

+0

'strtotime'窒息當我遇到'at' – nickb

+0

是的,我試過了,這可能是41年前的原因。 – Nathan

相關問題