2015-05-16 4 views
3

У меня есть дату в PHP отформатированный как это:PHP/MYSQL сравнить даты

Fri May 01 2015 17:25:00 GMT +0100 (GMT Daylight Time) 

И Im пытаясь сравнить его с поля MySQL DATETIME:

$date1 = DateTime::createFromFormat("Y-m-d H:i:s e+", $start); 
$sql = "SELECT * FROM ax_timestamps WHERE $date1 < datetimefeild ORDER BY id ASC"; 

Но когда он выполняет это возвращает 0, несмотря на то, что на основе входных данных и элементов в базе данных он должен извлекать результаты.

пример данных в datetimefeild Фейлд:

2015-05-16 07:44:56 

Эта дата передается в PHP с помощью Ajax пост с JQuery Datepicker, который был установлен, как это:

$("#datepicker").datepicker({ dateFormat: 'yy-mm-dd' }); 
var start = $.datepicker.parseDate("yy-mm-dd", $('#datepicker').val()); 
+0

Вы уверены, что имя поля 'datetimefeild' и не' datetimefield'? – axxis

ответ

0

Вы пропускании date в неправильном формате (как строка). Вы должны сначала преобразовать его в тип datetime в предложение where, используя функцию str_to_date().

Пример:

SELECT str_to_date('2015-05-01 08:00:00', '%Y-%m-%d %h:%i:%s') 

Применяя его, ваши $ SQL строка станет:

$sql = "SELECT * FROM ax_timestamps WHERE datetimefeild < str_to_date('".$date1."', '%Y-%m-%d %h:%i:%s') ORDER BY id ASC"; 

EDIT: это также работает:

$sql = "SELECT * FROM ax_timestamps WHERE datetimefeild < '".$date1."' ORDER BY id ASC"; 
+0

Кажется, что они работают неправильно. Они оба возвращают результаты ввода образца, но когда я помещаю дату, которая позже даты в базе данных, она все равно возвращает их, когда она не должна. Например. Пт май 31 2015 17:25:00 GMT +0100 (GMT Daylight Time) – Lukesmith

+0

Я по-прежнему считаю, что вам нужно преобразовать ваше время и дату в формат MYSQL, что как-то, как я упоминал выше. С другой стороны, я вижу, что другая проблема выбора даты в вашем примере использует «yy-mm-dd», в котором отсутствует временная часть. – kayess

0

Я думаю, что

Fri May 01 2015 17:25:00 GMT +0100 (GMT Daylight Time) 

не является допустимым форматом даты/времени. Вам нужно иметь только

Fri May 01 2015 17:25:00 GMT +0100 

так что вы можете сделать это

$date1 = new DateTime(substr($start, 0, -20)); 

и

$sql = "SELECT * FROM ax_timestamps WHERE {$date1->format('Y-m-d H:i:s')} < datetimefeild ORDER BY id ASC";