![]() |
|
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]()
|
|
| Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: нет Всего: 67 |
Не знаю как преобразовать локальный формат даты в формат MySQL.
Есть такой формат $lang['DateFormat']="%2\$s/%1\$s/%3\$s";, дата возвращается так:
где: $this->day - день, $this->month - месяц, $this->year - год. Эти значения известны при выводе даты. Нужно, когда пользователь вводит в строку поиска дату такого же формата, то на сервере преобразовать эту дату к формату, который понимает MySQL. Форматы зависят от текущей локали пользователя. Каким образом можно сконвертировать локальный формат в мускульный? |
|||
|
||||
| CyClon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: 1 Всего: 4 |
Не понял немного. Итак, что такое мускульный формат, примерчик можно? И еще, такого же формата, это какого?
Может...
Вернет:
|
||||
|
|||||
| Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: нет Всего: 67 |
Неправильно объяснил на скорую руку...
В общем в БД хранятся записи, где есть поля даты в формате "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 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.10.2005 Где: Киев, Украина Репутация: 2 Всего: 15 |
а как ты формируешь дату при выводе пользователю?
для этого, вроде, всегда нужно указывать формат строкового представления даты то бишь - всегда знаешь в каком формате пользователь эту дату редактировал узаешь strptime и все ок или я чего-то недопонял в постановке задачи? |
|||
|
||||
| Ciber SLasH |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: нет Всего: 67 |
Он и так строковый.
Пользователь не редактирует дату. Ему выводится инфа вместе с датой, а он должен иметь возможность поиска в этой инфе по дате. Но дата у всех в разных форматах. Это конечно хорошая функция, но она работает только в PHP 5.1.0RC1 и выше, а надо чтобы работала и в 4-ке. |
||||||
|
|||||||
| ZlojEzh |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.10.2005 Где: Киев, Украина Репутация: 2 Всего: 15 |
Output:
уфф... коряво до безобразия, для любителя оптимизации - просто находка но вроде работает подкинь, плз, еще возможных форматов, надо протестить строки не длинные, посему регекспы много времени занимать не должны да и правила в них довольно строгие - быстрее работать будут но если функция будет запускаться по сотне раз на странице - надо искать другой подход |
||||
|
|||||
| Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: нет Всего: 67 |
Да уж, намудрил. Пожалуйста:
Спасибо за ответ, я так и думал, что придётся возиться с регами, но муторно это всё очень. Будем дальше думать... |
|||
|
||||
| CyClon |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: 1 Всего: 4 |
Вот, наварганил
Вернет нам:
Как видишь, ввели три даты в разных форматах - получили те же три, но в одном формате. Код вроде не громоздкий. Задача решена? Или я опять чего-то не понял Добавлено @ 14:51 В обратную сторону:
Вернет нам:
Это сообщение отредактировал(а) CyClon - 8.4.2006, 14:47 |
||||||||
|
|||||||||
| ZlojEzh |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.10.2005 Где: Киев, Украина Репутация: 2 Всего: 15 |
Input:
Output:
вывод: работает только для дат в пределах текущего месяца |
||||
|
|||||
| Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: нет Всего: 67 |
CyClon, нужно не для текущей даты, а для любой.
|
|||
|
||||
| CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: 1 Всего: 4 |
Да, сразу не сообразил. Хм, а что же тогда придумать? Как отличить en_GB от en_US? Интерестно
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Тексты | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |