Возврат строк данных с использованием диапазона дат

#php #mysql

#php #mysql

Вопрос:

На моем сервере есть простая функция PHP, которая просматривает базу данных и возвращает строки таблицы, которые находятся между переданными датами. Код выглядит следующим образом

 if(isset($_GET['startDate'])) {
  $startDateRaw = $_GET['startDate'];
  $startSplit = explode("_", $startDateRaw);
  $startDate = date('d/m/Y', mktime(0,0,0, $startSplit[1], $startSplit[0], $startSplit[2]));
  $endDate = date('d/m/Y');

  if(isset($_GET['endDate']))
  {
    $endDateRaw = $_GET['endDate'];
    $endDateSplit = explode("_", $endDateRaw);
    $endDate = date('d/m/Y', mktime(0,0,0,$endDateSplit[1], $endDateSplit[0], $endDateSplit[2]));
  }
  

Затем он подключается к базе данных, а затем выполняет этот запрос и кодирует результат

 $query = "SELECT * FROM AppointmentList WHERE (DateCreated >= STR_TO_DATE($startDate, '%d%m%Y') AND DateDue <= STR_TO_DATE($endDate, '%d%m%Y'));";
$result = mysql_query($query,$link) or die('Errant query:  '.$query);

$posts = array();
if(mysql_num_rows($result)) {
   while($post = mysql_fetch_assoc($result)) {
   $posts[] = array('Appointments'=>$post);
   }
}

header('Content-type: application/json');
echo json_encode(array('Appointments'=>$posts));
  

Запрос выполняется, но данные не возвращаются (между диапазонами дат происходит сброс данных).

Код можно увидеть в коде встреч

Я предполагаю, что что-то не так между преобразованием в STR_TO_DATE и форматом $ StartDate и $EndDate, но не вижу, что это такое.

Комментарии:

1. Пожалуйста, не используйте давно устаревший mysql_ API PHP

2. Почему вы конвертируете его дважды? Просто преобразуйте его в Y-m-d формат в первый раз.

Ответ №1:

Похоже, что ваши даты в вашей php-программе выглядят следующим образом: '12/31/2015'

Если это так, вам нужно использовать STR_TO_DATE() подобное, чтобы получить успешные преобразования во внутренний формат даты MySQL. Обратите внимание на / символы в строке формата.

  STR_TO_DATE($startDate, '%d/%m/%Y')