2015-12-21 148 views
0

來自API的日期值是「2015-12-16T22:14:26-0700」現在我需要將日期轉換爲「2015-12-16 22:14:26」而不使用DateTime對象。爲了做到這一點,我試圖匹配最後的時區-0700,並嘗試將日期分成 「2015-12-16」,「22:14:26」,「-0700」 下面的代碼返回一個數組。請讓我知道我在這裏做錯了什麼。如何在PHP中分隔日期,時間和時區?

同我必須做,如果日期是在

「二○一五年十二月一十七日07:00:00 ETC/GMT」未來這種格式也是如此。

preg_match("/.*?([-+]d+)$/", "2015-12-16T22:14:26-0700", $timeZone); 
print_r($timeZone); 
+0

@MarcB,OP,'preg_match'中的第三個參數:'$ timeZone' –

+0

我猜應該正確啓動RTFScreen ... –

+0

「不使用DateTime對象」 - 爲什麼這個約束? – Gordon

回答

1

這應該拆分你的字符串。

preg_match("/(\d{4}-\d{1,2}-\d{1,2})T(\d{1,2}:\d{1,2}:\d{1,2})(-?\d{4})/", "2015-12-16T22:14:26-0700", $timeZone); 

輸出:

Array 
(
    [0] => 2015-12-16T22:14:26-0700 
    [1] => 2015-12-16 
    [2] => 22:14:26 
    [3] => -0700 
) 

PHP演示:https://eval.in/488702

Regex101演示(和解釋):https://regex101.com/r/yJ0lV5/1

您當前的正則表達式將只捕獲區偏移;如果您的數字元字符已更正爲包含反斜槓,則正如d+允許多個d一樣。你的正則表達式的功能演示,https://regex101.com/r/yJ0lV5/2

+0

它工作完美。感謝您解釋我的正則表達式問題 – Krishna

0

正則表達式模式:

獲取日期:

/[0-9]{4}-[0-9]{2}-[0-9]{2}[a-zA-Z]{1}/ 

獲取時間:

/[0-9]{2}:[0-9]{2}:[0-9]{2}-[0-9]*/ 

不知道這是否是你想要的,但它得到的日期和時間分開