Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как сравнить текстовые даты? 
:(
    Опции темы
begin
Дата 29.10.2007, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 415
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Пишу для сайта сервис афиши. Когда админ будет вводить туда новое событие, он будет писать в графе "Дата" дату в виде текста. Например, "15 ноября".
Подскажите, как можно умудриться сравнить такую дату с датой, полученной функцией date?
Мне это нужно, чтобы в отдельном месте сайта показывать ближайшее событие из афиши, и при этом  игнорировать уже прошедшие события (без удаления их). Причем, нужно учитывать, что событие "2 января" должно быть позже "15 ноября", хотя если их тупо сравнить, то получится наоборот.
PM MAIL   Вверх
Akina
Дата 29.10.2007, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 5
Всего: 454



Цитата(begin @  30.10.2007,  00:33 Найти цитируемый пост)
Когда админ будет вводить туда новое событие, он будет писать в графе "Дата" дату в виде текста. Например, "15 ноября".

А если+ его заставить выбирать день и месяц в выпадающих списках или чем-нить типа DataPicker - то не в виде текста.

Цитата(begin @  30.10.2007,  00:33 Найти цитируемый пост)
если их тупо сравнить

А не надо их сравнивать ТУПО. Тупость - качество, несовместимое с созданием нормальной программы.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
begin
Дата 30.10.2007, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 415
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Дату нужно оставить именно в таком формате - она так выводится в списке афиш..
Я и не хочу делать тупо, поэтому и советуюсь здесь  smile 
Подозреваю, тут не будет легкого решения.. Проще наверно заставить админа удалять просроченные афиши, и выводить как ближайшую, ту что первая с начала по id.
Правда, если придется добавить событие с датой между уже существующими, то все эта идиллия рухнет  smile 

Может все таки есть какой нибудь способ? Ну например, как-то распарсить эту дату, перевести ее в формат функции date и тогда уже сравнивать?
Правда, как это реализовать в виде конкретного кода, я пока не представляю
PM MAIL   Вверх
Akina
Дата 30.10.2007, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 5
Всего: 454



Цитата(begin @  30.10.2007,  02:09 Найти цитируемый пост)
Дату нужно оставить именно в таком формате - она так выводится в списке афиш..

Ну и форматируй при выводе.

Цитата(begin @  30.10.2007,  02:09 Найти цитируемый пост)
Подозреваю, тут не будет легкого решения

Я тоже... впрочем, его можно облегчить - почитав хоть что-нить о принципах хранения данных.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
flashaa
Дата 30.10.2007, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Ну надо хоть какую-то последовательность и договоренность при вводе соблюсти, тогда задача решаема, в противном случае - бардак. Пусть администратор выводит все даты в формате типа 12 декабря 2007.
Тогда эту дату можно обработать следующим образом:
Код

$months = array ('января' => 1, 
'февраля' => 2, 
'марта' => 3, 
'апреля' => 4, 
'мая' => 5,  
'июня' => 6,  
'июля' => 7, 
'августа' => 8, 
'сентября' => 9, 
'октября' => 10, 
'ноября' => 11, 
'декабря' => 12);
$date = '12 декабря 2007';
$dateArray = explode($date);
$dateArray[1] = $months[$dateArray[1]]; // Получаем числовое представление месяца
$time = mktime(0, 0, 0, $dateArray[1], $dateArray[0], $dateArray[2]); // Получили дату в формате unix_timestamp

$sql = 'SELECT *, ABS(DATE_SUB(поле_с_датой_статьи, '. $time . ')) as dif FROM articles ORDER BY dif ASC LIMIT 1';


На счет корректности ABS(DATE_SUB(date_add, '. $time . ')) не уверен на 100%, но суть её в том, чтобы вычислить разницу между твоей датой и датами статей и отселектировать одну(или несколько) статей по возрастанию этого промежутка между датами, т.е. первыми выведутся самые ближайшие, а их кол-во ограничивается конструкцией LIMIT.

Это сообщение отредактировал(а) flashaa - 30.10.2007, 10:11
PM MAIL   Вверх
Glip
Дата 30.10.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



можно еще посмотреть на strtotime()
а хранить и сравнивать действительно лучше или в timestamp или в виде предусмотреном субд для хранения даты


--------------------
user posted image
PM MAIL   Вверх
Akina
Дата 30.10.2007, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 5
Всего: 454



Оператор - существо, как правило, безграмотное. Так что будут не только опечатки. И ввод даты свободным текстом - это поиск дополнительных приключений на определенную часть тела.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0479 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.