2017-05-12 4 views
2

일부 데이터를 웹 응용 프로그램에 보내는 새로운 센서를 설계하고 있습니다. 유사한 센서를 사용하지만 데이터 채널을 사용하여 응용 프로그램에 전송되는 값을 다른 데이터 유형으로 나눕니다.값이 datetime인지 확인하십시오.

그러나이 새 센서는 데이터 또는 32 비트 시간 (밀리 초)을 전송합니다. 값이 데이터인지 또는 시간 소인인지를 알기 위해 식별자 비트를 보내지 않습니다.

데이터와 타임 스탬프가 모두 정수 값이므로 어떤 데이터인지 어떻게 확인할 수 있습니까? 이미이 같은 preg_match를 발견 절

: 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 비트 값은 항상 타임 스탬프 것을, 그래서 난 그냥 valuecounter을 만들어 $ 값이 1 또는 2가 다음 할 일 경우 사용 이것, 그렇지. 이렇게하면 각 값을 확인하는 것이 훨씬 쉬워졌습니다.

1

당신이 정규 표현식을 사용할 수 있습니다 .. 받았습니다 값을 계산하고 값 9 날짜 시간 등의 열을 쉽게 처리 할 수 ​​있습니다

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에서 createFromFormat() 방법을 사용할 수 있습니다.

당신은 방법의 오류를 검사하는 함수를 만들 것입니다 :

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 
    ); 
} 

그것이 도움이되기를 바랍니다.

편집 : 기본 형식에

추가 u (마이크로 초)입니다.

+0

감사합니다. if 문에서 도움이 될 것입니다. 그 점을 더 깊이 들여다 볼 것입니다. 그렇다면'if ($ value = is_valid_date) then ..... else else '일 수 있습니다. 내 머리 꼭대기에서 .- – Marco

+0

@Marco Glad 그것이 도움이되었습니다. 질문에 대한 답변을 주시면이 답변의 유효성을 확인해 주셔서 감사합니다. 행운을 빕니다. ;) – JazZ

+0

그래, 만약 내가 옵션을 함께했다, 나는 것입니다. 그러나 우리는 메시지의 처음 2 16 비트 값은 항상 타임 스탬프이기 때문에, 나는 단지 valuecounter를 만들었고 $ 값이 1 또는 2라면 if 값을 사용했다. ;) – Marco

관련 문제