2017-05-12 10 views
2

私たちは、いくつかのデータをWebアプリケーションに送信する新しいセンサーを設計しています。同様のセンサーを使用しますが、データチャネルを使用してアプリケーションに送信する値を異なるデータ型に分割します。値がdatetimeであることを確認してください

ただし、この新しいセンサーは、データまたは32ビットの時間をミリ秒単位で送信します。値がデータであるかタイムスタンプであるかを見るために識別子ビットを送信しません。

データとタイムスタンプの両方が整数値なので、どうすれば確認できますか?私はすでにこのようにするpreg_match、見つかったVV

:MI:SS

if (preg_match('/[0-9]{4}-[0-9]{2}-[0-9]{2}/', $value)) 

をしかし、どのように行う

タイムスタンプが

YYYY/MM/DD HHになります私はミリ秒を含んでいますか?または、他の場合は単純なより良い方法がありますか?

更新

私は、アプリケーションによって受け取った日付はINT16になることを期待しています。 preg_match

preg_match_all("/(\d{4})\/(\d{2})\/(\d{2})\s(\d{2})\:(\d{2})\:(\d{2})\:(\d{2})/", $input_lines, $output_array); 

preg_match_all付: だから、

+0

DateTimeオブジェクトを使用することができます。http://stackoverflow.com/questions/14504913/verify-valid-date-using-phps-datetime-class – JazZ

+0

[PHPのDateTimeクラスを使用して有効な日付を検証する](http ://stackoverflow.com/questions/14504913/verify-valid-date-using-phps-datetime-class) – webnoob

+0

私の更新を見て、それは重複しているとは思わない.. – Marco

答えて

0

私は別の方法でそれを固定:

を、次にん、我々はメッセージの最初の2つの16ビット値は常にタイムスタンプであると判断するので、$ valueが1または2である場合、私はちょうどvaluecounterを作り、Aを使用これ、そうしてください。 これは私にとって各値をチェックする方がはるかに簡単でした。

1

あなたは、この正規表現を使用することができます。..受け取った値をカウントし、値9と日付時刻などの10を処理する方が簡単かもしれません

preg_match("/(\d{4})\/(\d{2})\/(\d{2})\s(\d{2})\:(\d{2})\:(\d{2})\:(\d{2})/", $input_line, $output_array); 

数字、バックスラッシュ、および ':'文字のみを確認してください。指定された数字が有効かどうかはチェックされません。 (それは形式にマッチした空でない場合)

をあなたは正規表現を実行したら、あなたはその後、出力配列を確認することができますし、それが空だかどうかを確認する正規表現は、この範囲に一致します。

0000/00/00 00:00:00:00 
9999/99/99 99:99:99:99 
+0

ありがとう、私はどのように私はまだそれがわからないので、データはアプリケーションに提示されます。それがintとして表示されている場合、preg_matchはおそらく動作しません。次に、メッセージから最後の2つの値を取得するためにカウントまたは何かを使用する必要があります(メッセージは10個の値を含み、最後は2がタイムスタンプです)。 – Marco

5

あなたはPHP DateTime objectから​​メソッドを使用することができます。

あなたは、メソッドのエラーをチェックする機能を作成します。

function is_valid_date($date, $format = 'Y/m/d H:i:s.u') 
{ 
    $d = DateTime::createFromFormat($format, $date); 
    $errors = DateTime::getLastErrors();   

    return (
     $errors['warning_count'] == 0 && 
     $errors['error_count'] == 0 && 
     $d !== false 
    ); 
} 

はそれがお役に立てば幸いです。

EDIT:

は、デフォルトのフォーマットに(マイクロ秒)uを追加しました。

+0

ありがとう。これはifステートメントで役に立ちます。それをさらに深く見ていきます。それから、 'if($ value = is_valid_date)then ..... else else 'のデータ型になります。私の頭の上から.- – Marco

+0

@マコーグッドそれは助けた。あなたの質問を解決した場合は、この回答を確認していただきありがとうございます。がんばろう。 ; ) – JazZ

+0

ええ、もし私が一緒に行ったオプションだったら、私はそうでした。しかし、私たちは、メッセージの最初の2 16ビット値は常にタイムスタンプであると判断したので、私はちょうどvaluecounterを作り、if $値が1または2であることを使用しました。 ;) – Marco

関連する問題