2017-03-15 43 views
1

My Php服務器應用程序從移動應用程序接收數據,包括日期/時間字符串。解析輸入字符串時的半小時時區指定

2017年3月14日17:56:42GMT + 05.500

strtotime("2017-03-14 17:56:42GMT+05.500") 

一個這些字符串最近解析字符串轉換成一個DateTime實例時,因爲時區格式化這樣導致了異常

返回false,而

strtotime("2017-03-14 17:56:42GMT+05") 

返回一個紀元時間戳。

處理這些字符串的最佳做法是什麼?

我可以在生成的時間戳上替換並偏移半個小時,然後指定一個有效的(通過php標準)時區。

這感覺就像我盼到一個大一堆爛泥的 - 也許有些善良的人有一個作曲家庫救援

+0

將字符串拆分爲'。'數組,然後只使用數組的第一個元素。 – RST

+0

實際上,將時區偏移格式轉換爲HH:MM會使字符串可分析: strtotime(「2017-03-14 17:56:42GMT + 0530」)會產生一個紀元時間戳。 我仍然需要將偏移字符串轉換爲,儘管 – andkrup

回答

0

所以問題是,我的PHP應用程序無法理解「GMT + 05.500 '時區部分,但可以瞭解'GMT + 0530'。

我可以使用正則表達式下面找出如果我需要輸入一些字符串替換和任何十進制轉換爲相應的分鐘偏差

if(preg_match('/\+0?[\d]([,.:;_ ])([\d]{3})$/', $datetime, $matches){ 
    //... convert 'GMT+05.500' to 'GMT+0530' by using a switch or actual calculation 

目前,我一直沒能如果找出用戶-agents將使用區域/文化特定的分隔符,所以我假設了一系列可能性(正則表達式的',。;:_'部分)。也許有如何格式化這個ISO標準,但用戶代理是用戶代理... :)

'GMT + 0530'也將影響所產生的歷元時間戳時使用strtotime()由適當的30分鐘,所以沒有數據丟失。

+1

是的,有一個衆所周知的ISO標準。它是ISO 8601,看起來像'2017-03-14T17:56:42 + 05:30'。另請參閱RFC3339。如果可能,請修復移動應用程序,使其不使用非標準格式。 –