2012-02-01 5 views
0

현재 데이터베이스에 나는 날짜 형식 yyyy-mm-dd을 사용합니다.
DOB로 검색하려면 yyyy-mm-dd 형식을 사용하여 기본 날짜 형식과 일치시켜야합니다.다른 형식의 PHP 검색 날짜

dd-mm-yyyy 또는 dd/mm/yyyy 또는 yyyy-mm-dd를 입력하는 사용자로부터 DOB를 검색하여 결과를 알려주는 방법이 있습니까 ???

$keyword = clean($keyword,1); 

$result = $db->query("SELECT name, dob, email FROM user WHERE name LIKE '$keyword%' OR dob LIKE '$keyword%' OR email LIKE '$keyword%'"); 

if($result){ 
    //echoing the result 
} 
+0

DATE 열로 열 – Gordon

답변

2

쉽지 않음. 먼저 SQL 쿼리에 전달하기 전에 사용자 입력을 올바른 형식으로 변환하십시오. 예를 들어

:

if (preg_match('~([0-9]{2})[-/]([0-9]{2})[-/]([0-9]{4})~', $input, $matches)) { 
    return $matches[3].'-'.$matches[2].'-'.$matches[1]; 
} else { 
    return $input; 
} 
1

예, 당신은 당신의 SQL 쿼리에 전달하기 전에 PHP에 결과를 정상화해야한다. strtotime()가 제대로 그 변화를 처리 할 가정이 같을 수

귀하의 코드 ...

$dateForSqlQuery = date('Y-m-d', strtotime($input)); 

....

반면에 사용자 입력을 별도의 일, 월 및 연도 입력으로 분리 한 다음 직접 문자열을 생성해야합니다.

1

strtotime을 사용하여 거의 모든 (합리적으로 형식화 된) 날짜를 타임 스탬프로 파싱 할 수 있으며 다른 형식으로 변환 할 수 있습니다. 예를 들어

:

$yyyy_mm_dd = date('Y-m-d', strtotime('02/01/2012')); 

그것은 꽤 프로세서 무거운 기능을하지만, strtotime, 그래서 살려주 수 않는 것!

+0

구분 기호가 슬래시 (/)이면 미국식 m/d/y로 간주됩니다. – Sjoerd

2

당신은 예를 들어, UNIX 타임 스탬프와 일치 수 :

$timestamp = strtotime($date) 
SELECT * WHERE UNIX_TIMESTAMP(dob) = '$timestamp' 

확인 http://php.net/manual/en/function.strtotime.php 더 많은 정보를 원하시면 strtotime()

이에 날짜 범위 내에 검사를 위해 쉽게 할 것이다.