![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Flap |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.11.2005 Репутация: нет Всего: нет |
Добрый день.
Столкнулся с такой проблеммой: В админке есть настройка "формат даты". Задается в формате РНР, например 'd.m.Y' (может быть и по другому) Нужно сделать так, чтобы при вводе даты пользователем, дата проверялась на допустимость значений, конвертировалась в timestamp и далее запись в БД. С помощью такого кода удается отловить только самые грубые ошибки и месяц постоянно = 1
в $res всегда получаем '15.01.1990' Видима я чего-то не понимаю. Может подскажет кто, как это сделать не через Zend framework и правильно. Т.е. по сути, нужна функция, обратная date (указал строку, указал формат строки и получил timestamp); strtotime не подходит, поскольку там нельзя указать произвольный формат входной строки. Спасибо. |
|||
|
||||
| Flap |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.11.2005 Репутация: нет Всего: нет |
Единственный вариант вижу: конвертировать введеную пользователем дату в формат для strtotimе согласно настройкам и далее через strtotime получать ее timestamp. Но может есть более простой вариант?
|
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
strptime, strftime ?
Впрочем, можно просто вручную перевести дату в формат strtotime, заменив точки на косые... Это сообщение отредактировал(а) ksnk - 9.12.2008, 12:17 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Flap |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.11.2005 Репутация: нет Всего: нет |
Так в том-то и дело, что неизвестно, что захочет пользователь.
d M Y d-m-Y d(D) F, Y - все это, по идее допускается. Надо с заказчиком компропис искать |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Flap |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.11.2005 Репутация: нет Всего: нет |
||||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
ну, это уже походит на разделение варенья и сметаны, когда они обе банки разбились, а содержимое хорошо перемешалась
всех вариантов предугадать нельзя, поэтому лучше поставить обработку разделителей в нужный вид, затем strtotime и если дата не оказалась в нужном диапазоне, то ошибку -> неправильнный ввод даты я вообще делаю так. если дата имеет значение только в качестве информации (скажем дата выдачи паспорта), по которой поиск никогда проводиться не будет, то даю пользователям ввести как им угодно. если нужно точное число, которое будет применяться для сортировки, то ставлю три селекта на день/месяц/год и пусть выбирают из нужных вариантов. формат обеспечен |
|||
|
||||
| Flap |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.11.2005 Репутация: нет Всего: нет |
Вообщем, сделал через Zend Framework, формат ограничил символами d, m, M, s, y.
Вроде нормально в обе стороны работает. Спасибо всем за идеи. |
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 14 Всего: 137 |
Желательно чтобы человек, просивший совета и нашедший ответ собственными силами, поделился им с другими - вдруг кому-то пригодиться!
|
|||
|
||||
| sanzend |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 30.12.2008 Репутация: нет Всего: нет |
С помощью Zend это вполне реально. Zend_Date понимает константы функции date, только об этом нужно позаботится предварительно
а у вас месяц 1 потому что по дефолту для Zend_Date "m" это не месяц а минута. Смотрите http://framework.zend.com/manual/ru/zend.d....constants.list Итого, передавайте в isDate выбранный формат, только так чтобы Zend_Date его понимал, и вы получите желаемый результат. А дату пусть вводят с помощью селектов или еще лучше JS календаря. Это сообщение отредактировал(а) sanzend - 30.12.2008, 13:41 |
||||
|
|||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |