Решение с дата и час

kini

Registered
Здравейте,

Тъй, като за първи път се налага да използвам сравнение между дати и часове, ситуацията ми е малко хард логически.. Опитах няколко начина, на които попаднах в мрежата, но не работят така както трябва.

Имам следните полета: datestart, hourstart и dateend, hourend,
които се запазват в следния формат : Y/m/d и H:i
При въвеждане на запис от страна на потребителя, през формата, той избира начална дата, начален час, крайна дата и краен час.

До тук всичко е окей..


При извличането на записите от базата, би трябвало да има проверка между dateend, hourend и точното време в момента.
Ако записът например е по-стар с няколко минути, той да не бъде извличан.


Въобще възможно ли е да стане това нещо? :shock:
 
Можеш да сглобиш таймстамп и да сравняваш по него.
[sql]WHERE CONCAT(dateend, hourend) > :timestamp[/sql]
PHP:
$timestamp = date('Y/m/dH:i');
Но по-добре записвай датата и часа в едно поле тип datetime, сравнението ще е доста по-бързо:
[sql]WHERE datetimeend > NOW()[/sql]
 
raiden каза:
Можеш да сглобиш таймстамп и да сравняваш по него.
[sql]WHERE CONCAT(dateend, hourend) > :timestamp[/sql]
PHP:
$timestamp = date('Y/m/dH:i');
Но по-добре записвай датата и часа в едно поле тип datetime, сравнението ще е доста по-бързо:
[sql]WHERE datetimeend > NOW()[/sql]

Здравей,

При втория вариант, който си показал, има ли как да стане сравнението ако полетата са отделни, както е в моят случай или трябва да разглобя всичко? :?
 
Няма да разглобяваш нищо, можеш да създадеш новото поле от съществуващите и само да промениш формата в който се записват в INSERT-а на Y-m-d H:i. За MySQL база ли става въпрос?
 
raiden каза:
Няма да разглобяваш нищо, можеш да създадеш новото поле от съществуващите и само да промениш формата в който се записват в INSERT-а на Y-m-d H:i. За MySQL база ли става въпрос?

MySQL.

Създадох ново поле във формат datetime добавих датата и часът, евентуално за да тествам преди да променя съществуващите полета.

Код:
ENDDATETIMEFULL < NOW()

Отново извлича записите с изминали дати.
 
kini каза:
Код:
ENDDATETIMEFULL < NOW()

Отново извлича записите с изминали дати.
Така извличаш само такива с минала дата, използвай > NOW()
 
raiden каза:
kini каза:
Код:
ENDDATETIMEFULL < NOW()

Отново извлича записите с изминали дати.
Така извличаш само такива с минала дата, използвай > NOW()

Пробвах и така но извлича дните след днешният. Примерно за днес 19-ти съм добавил запис с времетраене от 20:00ч. до 00:00ч. Този запис не се извлича, като предстоящ

EDIT: Проблема е бил в това, че крайният час се е запазил във формат AM а не PM, т.е вместо краен час да е 19:00ч. то е 07:00
 
Можеш ли да пуснеш заявката в phpMyAdmin и да дадеш скрийншот на нея + резултата? Тази WHERE клауза трябва да върне всички записи, за които крайните дата и час не са достигнати, т.е. ако има за след ден, седмица, месец - тях също. Ако искаш да ги ограничиш можеш да добавиш още едно условие - началната дата да е най-много след X часа/дена.
ПС: крайната дата е 00:00 на 20ти нали?
 

Горе