| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Тексты > Преобразование даты из локального формата |
| Автор: Ciber SLasH 7.4.2006, 20:03 | ||
| Не знаю как преобразовать локальный формат даты в формат MySQL. Есть такой формат $lang['DateFormat']="%2\$s/%1\$s/%3\$s";, дата возвращается так:
где: $this->day - день, $this->month - месяц, $this->year - год. Эти значения известны при выводе даты. Нужно, когда пользователь вводит в строку поиска дату такого же формата, то на сервере преобразовать эту дату к формату, который понимает MySQL. Форматы зависят от текущей локали пользователя. Каким образом можно сконвертировать локальный формат в мускульный? |
| Автор: CyClon 7.4.2006, 20:42 | ||||
| Не понял немного. Итак, что такое мускульный формат, примерчик можно? И еще, такого же формата, это какого? Может...
Вернет:
|
| Автор: Ciber SLasH 7.4.2006, 21:50 |
| Неправильно объяснил на скорую руку... В общем в БД хранятся записи, где есть поля даты в формате "YYYY-MM-DD". А при выводе даты пользователю, она может иметь различый формат (в зависимости от локали). К примеру: локаль: en_US; формат: "%2\$s/%1\$s/%3\$s" локаль: en_GB; формат: "%s/%s/%s" локаль: de_DE; "%s.%s.%s" У каждого юзера своя локаль, в зависимости от географического расположения, поэтому они вводят дату в своём формате. Т.е. если у юзера локаль en_GB, то он вводит дату в виде 07/04/2006; если у юзера локаль en_US — то дата вида 04/07/2006; если у юзера локаль de_DE — то дата вида 07.04.2006 и т.д. Этих локалей куча и форматов тоже, т.к. эта система локализована на многие языки. Вот и возникает коллизия, когда дата одна 07.04.2006, а выглядит она у различных юзеров совершенно по-разному, а в БД она железно прописана и в формате "YYYY-MM-DD" (2006-04-07). Известно: локаль и формат и формат даты в БД. Найти: преобразование даты из локального формата к формату БД, т.е. к формату "YYYY-MM-DD". Вот собсна в чём вся загвоздка... |
| Автор: ZlojEzh 7.4.2006, 23:04 |
| а как ты формируешь дату при выводе пользователю? для этого, вроде, всегда нужно указывать формат строкового представления даты то бишь - всегда знаешь в каком формате пользователь эту дату редактировал узаешь strptime и все ок или я чего-то недопонял в постановке задачи? |
| Автор: ZlojEzh 8.4.2006, 00:25 | ||||
Output:
уфф... коряво до безобразия, для любителя оптимизации - просто находка но вроде работает подкинь, плз, еще возможных форматов, надо протестить строки не длинные, посему регекспы много времени занимать не должны да и правила в них довольно строгие - быстрее работать будут но если функция будет запускаться по сотне раз на странице - надо искать другой подход |
| Автор: Ciber SLasH 8.4.2006, 01:08 | ||
| Да уж, намудрил. Пожалуйста:
Спасибо за ответ, я так и думал, что придётся возиться с регами, но муторно это всё очень. Будем дальше думать... |
| Автор: CyClon 8.4.2006, 14:44 | ||||||||
Вот, наварганил
Вернет нам:
Как видишь, ввели три даты в разных форматах - получили те же три, но в одном формате. Код вроде не громоздкий. Задача решена? Или я опять чего-то не понял Добавлено @ 14:51 В обратную сторону:
Вернет нам:
|
| Автор: ZlojEzh 8.4.2006, 15:05 | ||||
Input:
Output:
вывод: работает только для дат в пределах текущего месяца |
| Автор: Ciber SLasH 8.4.2006, 16:59 |
| CyClon, нужно не для текущей даты, а для любой. |
| Автор: CyClon 8.4.2006, 17:20 |
| Да, сразу не сообразил. Хм, а что же тогда придумать? Как отличить en_GB от en_US? Интерестно |