2017-03-15 8 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") 

はエポックタイムスタンプを返します。

このような文字列を処理するベストプラクティスは何ですか?

grepは結果のタイムスタンプを30分置き換えてオフセットし、有効な(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 

分のオフセット関連する任意の10進に変換することができ、ユーザエージェントはロケール/カルチャー固有の区切り文字を使用するので、範囲の可能性を想定しています(正規表現の '、;;:_'部分)。おそらく、これをフォーマットするためのISO標準がありますが、ユーザーエージェントはユーザーエージェント... :)

strtotime()を適切な30文字で使用した場合、 'GMT + 0530'は結果のエポックタイムスタンプにも影響しますデータが失われることはありません。

+1

はい、よく知られているISO標準があります。これはISO 8601で、「2017-03-14T17:56:42 + 05:30」のように見えます。 RFC3339も参照してください。可能であれば、非標準フォーマットを使用しないようにモバイルアプリを修正してください。 –

関連する問題