дата поиска php в другом формате - PullRequest
0 голосов
/ 01 февраля 2012

В моей текущей базе данных я использую формат даты гггг-мм-дд .
Если я хочу выполнить поиск по DOB, то должен использовать формат гггг-мм-дд, чтобы сопоставить его с форматом даты по умолчанию.

Есть ли способ найти 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
}

Ответы [ 4 ]

2 голосов
/ 01 февраля 2012

Вы можете сопоставить метки времени UNIX, например:

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

Проверьте http://php.net/manual/en/function.strtotime.php для получения дополнительной информации о strtotime()

Это облегчит проверку в диапазоне дат.

2 голосов
/ 01 февраля 2012

не легко.Сначала преобразуйте введенные пользователем данные в правильный формат, а затем передайте их в запрос 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 голос
/ 01 февраля 2012

Вы можете использовать strtotime , чтобы проанализировать практически любую (разумно отформатированную) дату в метку времени, и оттуда вы можете преобразовать в любой другой формат.

Например:

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

Это довольно сложная функция процессора, strtotime, так что будьте осторожны!

1 голос
/ 01 февраля 2012

Да, вы должны нормализовать результат в PHP, прежде чем передавать его в ваш запрос SQL.

Ваш код может выглядеть примерно так ...

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

... при условии, что strtotime() правильно обработает эти варианты.

С другой стороны, вы действительно должны разбить пользовательский ввод на отдельный день, месяц и год, а затем сгенерировать строку самостоятельно.

...