|
|
|
| Всем доброго времени суток.
Нужно выводить строки по диапазону дат но выводятся лишние
Вот как я делал:
$date_start="02-07-2011";
$date_stop="04-07-2011";
В базе 5 записей в этом диапазоне:
2011-07-03 20:24:46
2011-07-03 18:37:58
2011-07-03 18:35:14
2011-07-03 18:30:26
2011-07-03 18:24:11
Вот как я делал:
"SELECT id,title FROM article WHERE DATE_FORMAT(date,'%d%m%Y') BETWEEN '$date_start' AND '$date_stop'"
Но почему-то выводятся записи вот с какими датами:
2011-07-03 20:24:46
2011-07-03 18:37:58
2011-07-03 18:35:14
2011-07-03 18:30:26
2011-07-03 18:24:11
2011-05-03 13:31:30
2011-05-03 13:29:07
2011-05-03 13:17:08
2011-05-03 13:16:47
Т.е месяц не учитывается.
Прошу помощи в решении задачи
поле date в формате DATETIME | |
|
|
|
|
|
|
|
для: СтепаныЧ
(05.07.2011 в 12:15)
| | Это связано с тем, что даты сравниваются с начала до конца, когда вы форматируете дату при помощи DATE_FORMAT() вы всю сортировку нарушаете, так как вместо того, чтобы сначала сравнить года, потом месяцы, потом дни, у вас сначала сравниваются дни, потом месяцы, потом годы, преобразуйте даты к MySQL формату
$date_start="2011-07-02";
$date_stop="2011-07-04";
| и сравнивайте с ними
"SELECT id,title FROM article
WHERE `date` BETWEEN '$date_start' AND '$date_stop'"
|
| |
|
|
|
|
|
|
|
для: cheops
(05.07.2011 в 12:39)
| | А тогда вопрос как это сделать без кучи кода. Есть ли какие-нибудь функции?
Спасибо за разъяснение | |
|
|
|
|
|
|
|
для: СтепаныЧ
(05.07.2011 в 12:41)
| | о какой куче кода идет речь? вам пердложили меньше кода чем у Вас было | |
|
|
|
|
|
|
|
для: Valick
(05.07.2011 в 13:00)
| | Да я понял это, но пользователь изначально вводит даты так: 02-07-2011 как все привыкли, а в sql запросе она перевернута, вопрос как это сделать в коде?
Так оно и у меня изначально работало в таком виде 2011-07-02 | |
|
|
|
|
|
|
|
для: СтепаныЧ
(05.07.2011 в 13:06)
| | Лучше всего ввести функцию-конвертор, через которую пропускать дату, введенную пользователями, можно начать отталкиваться от следующего скрипта
<?php
$date = "02-07-2011";
echo convertdate($date);
function convertdate($date)
{
list($day, $month, $year) = explode("-", $date);
return "$year-$month-$day";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(05.07.2011 в 13:24)
| | Спасибо большое, я уже такую организовал:
function convert_date ($date) {
$array = explode("-", $date);
$array = array_reverse($array);
$date = implode("-", $array);
return $date;
}
Вопрос решен, всем спасибо | |
|
|
|
|
|
|
|
для: СтепаныЧ
(05.07.2011 в 13:06)
| | а проверка на несуществующие даты есть? будь то 17 месяц или 56 число?
обычно при вводе дат пользователя слегка ограничивают в этом плане,
например выбор даты по календарику или раздельный выпадающий список
собрать нужную дату в любом порядке при таких условиях не составляет труда. | |
|
|
|
|
|
|
|
для: Valick
(05.07.2011 в 13:32)
| | А это впринипе не важно, я пишу прогу для своих работников, и им тупить смысла нет. | |
|
|
|
|
|
|
|
для: СтепаныЧ
(05.07.2011 в 14:49)
| | >А это впринипе не важно, я пишу прогу для своих работников, и им тупить смысла нет.
это не есть хорошо, плохой подход
нужно делать всегда продумано и на будущее | |
|
|
|