- Решение с дата и час
WT форуми -> PHP MySQL ASP.NET -> Решение с дата и час
Създайте нова тема Напишете отговор 
Автор Съобщение
kini
Нов
Нов

Регистриран на: 01/05/2010 12:36 pm

Support: 2
Bonus: 4
Мнения: 140
Мнение 19/08/2018 3:30 pm     Решение с дата и час Отговорете с цитат


Здравейте,

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

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

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


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


Въобще възможно ли е да стане това нещо? Shocked
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
raiden
Активен
Активен

Регистриран на: 08/12/2006 10:13 am

Support: 189
Bonus: 464
Мнения: 2178
Мнение 19/08/2018 4:03 pm      Отговорете с цитат


Можеш да сглобиш таймстамп и да сравняваш по него.
SQL code:
WHERE CONCAT(dateend, hourend) > :timestamp

PHP code:
$timestamp = date('Y/m/dH:i');

Но по-добре записвай датата и часа в едно поле тип datetime, сравнението ще е доста по-бързо:
SQL code:
WHERE datetimeend > NOW()
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
kini
Нов
Нов

Регистриран на: 01/05/2010 12:36 pm

Support: 2
Bonus: 4
Мнения: 140
Мнение 19/08/2018 4:10 pm      Отговорете с цитат


raiden написа:
Можеш да сглобиш таймстамп и да сравняваш по него.
SQL code:
WHERE CONCAT(dateend, hourend) > :timestamp

PHP code:
$timestamp = date('Y/m/dH:i');

Но по-добре записвай датата и часа в едно поле тип datetime, сравнението ще е доста по-бързо:
SQL code:
WHERE datetimeend > NOW()


Здравей,

При втория вариант, който си показал, има ли как да стане сравнението ако полетата са отделни, както е в моят случай или трябва да разглобя всичко? Confused
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
raiden
Активен
Активен

Регистриран на: 08/12/2006 10:13 am

Support: 189
Bonus: 464
Мнения: 2178
Мнение 19/08/2018 4:25 pm      Отговорете с цитат


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

Регистриран на: 01/05/2010 12:36 pm

Support: 2
Bonus: 4
Мнения: 140
Мнение 19/08/2018 4:33 pm      Отговорете с цитат


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


MySQL.

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

ENDDATETIMEFULL < NOW()


Отново извлича записите с изминали дати.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
raiden
Активен
Активен

Регистриран на: 08/12/2006 10:13 am

Support: 189
Bonus: 464
Мнения: 2178
Мнение 19/08/2018 4:37 pm      Отговорете с цитат


kini написа:
ENDDATETIMEFULL < NOW()


Отново извлича записите с изминали дати.

Така извличаш само такива с минала дата, използвай > NOW()
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
kini
Нов
Нов

Регистриран на: 01/05/2010 12:36 pm

Support: 2
Bonus: 4
Мнения: 140
Мнение 19/08/2018 4:44 pm      Отговорете с цитат


raiden написа:
kini написа:
ENDDATETIMEFULL < NOW()


Отново извлича записите с изминали дати.

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


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

EDIT: Проблема е бил в това, че крайният час се е запазил във формат AM а не PM, т.е вместо краен час да е 19:00ч. то е 07:00
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
raiden
Активен
Активен

Регистриран на: 08/12/2006 10:13 am

Support: 189
Bonus: 464
Мнения: 2178
Мнение 19/08/2018 4:54 pm      Отговорете с цитат


Можеш ли да пуснеш заявката в phpMyAdmin и да дадеш скрийншот на нея + резултата? Тази WHERE клауза трябва да върне всички записи, за които крайните дата и час не са достигнати, т.е. ако има за след ден, седмица, месец - тях също. Ако искаш да ги ограничиш можеш да добавиш още едно условие - началната дата да е най-много след X часа/дена.
ПС: крайната дата е 00:00 на 20ти нали?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети