Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Сравнение дат
Форумы портала PHP.SU » » Вопросы новичков » Сравнение дат

Страниц (1): [1]
 

1. alsio - 01 Января, 2014 - 01:09:32 - перейти к сообщению
В таблицу циклом выводится инфа из БД. Есть поле "дата" (лежит в БД в "русском" формате dd.mm.yy). Надо подсвечивать строки с датой старше 20 дней.

Проблема в том, что сравнивать приходится с датой в "американском" формате yy.mm.dd... Попробовал перевести свою дату в такой формат, но дальше не получается...

PHP:
скопировать код в буфер обмена
  1.  
  2. $alert_date=date("yymmdd",strtotime("-20 day"));
  3. while ($row = mysql_fetch_array($res)) {
  4.   $conv_date1=($row['creatdate']);
  5.   $tmp = explode('.',$conv_date1);
  6.   $day = (int)$tmp[0];
  7.   $month = (int)$tmp[1];
  8.   $year = $tmp[2];
  9.   $conv_date2=$year,$month,$day;
  10.   if($conv_date2<=$alert_date){$bg='#ff9999';}else{$bg='#fff';}?>
  11.   <tr>
  12.     <td valign="top" <? echo ("bgcolor='".$bg."'"); ?>><? echo (" ".$row["creatdate"]." "); ?></td>
  13.     <td valign="top" <? echo ("bgcolor='".$bg."'"); ?>><? echo (" ".$row["info"]." "); ?></td>
  14.   </tr>
  15. <? } ?>
  16.  


Ну, во-первых, это
понятное дело, не работает. Как правильно?

А во-вторых, здесь
цикла то нет. Только по последней строчке будет работать...

Или какие еще есть варианты? Помогайте, плиз... Закатив глазки
2. LIME - 01 Января, 2014 - 01:35:54 - перейти к сообщению
alsio пишет:
лежит в БД в "русском" формате dd.mm.yy
гигантская ошибка
просто эпик фэйл
не так давно столкнулся с таким
мой предшественник так хранил дату
да отсохнут его пальцы по самую шею
рецепта не существует
дело в том что выборку невозможно сделать так как бд сравнивает даты строково
я написал скриптик который перевел все эти кривые даты в правильный формат
в дополнительное поле
от кривых рук спасения не придумали еще
либо сам это дело исправляй либо найми более знающего спеца...пойдет и дешевый новичек
еще раз- надо исправлять...в данной ситуации решить проблему невозможно
(Добавление)
вот блин маньяк в НГ ночь спрашивать
3. alsio - 01 Января, 2014 - 13:08:29 - перейти к сообщению
LIME пишет:
alsio пишет:
лежит в БД в "русском" формате dd.mm.yy

еще раз- надо исправлять...в данной ситуации решить проблему невозможно


Вот блин! Но что делать, приходится учиться на своих ошибках...

Ну, допустим, я переведу все даты в БД в нужный формат. Вопрос сравнения отпадет. Встанет пара других:
1. как выводить даты в удобоваримом для юзера формате?
2. как вводить даты в БД? У меня используется datepicker и надо, чтобы юзер выбрал русскую дату, а записалась она американской.
4. caballero - 01 Января, 2014 - 14:06:37 - перейти к сообщению
даты в Бд хранятся во внутреннем формате и перевести их никуда нельзя

если надо сравнивать формируешь SQL с латоы й в виде yyy-mm-dd и сравниваешь средствами SQL

то же самое для ввода. с датепикера оно и так правилно вставит


а выводить для юзеров функцией date() с нужным форматом
5. Мелкий - 01 Января, 2014 - 14:52:22 - перейти к сообщению
alsio пишет:
1. как выводить даты в удобоваримом для юзера формате?

Всем, чем угодно. Чистый SQL, штатный класс PHP datetime, вплоть до ручного извращения со всякими explode и прочими извращениями через таймштамп.

alsio пишет:
У меня используется datepicker

См. документацию. Параметр dateFormat.
6. alsio - 01 Января, 2014 - 16:40:51 - перейти к сообщению
Изменил тип полей с датами на DATE. Вывод делаю так:
PHP:
скопировать код в буфер обмена
  1. <td><? $date = date_create($row["orders_creatdate"]); echo date_format($date, 'd.m.y'); ?></td>

Поправьте, если перемудрил.

Теперь вопрос. Если мне не нужно писать в БД никакой даты, она все равно записывается, как 0000-00-00. Соответственно, и выводится ерунда.

Поставил значение по умолчанию NULL. Но при выводе
PHP:
скопировать код в буфер обмена
  1. $date = date_create($row["orders_creatdate"]);
создает текущую дату.

Что делать? Еще проверку на NULL прикрутить к $date или все проще?
(Добавление)
Хотя даже со значением NULL по умолчанию, при пустой записи, пишет 0000-00-00
7. alsio - 02 Января, 2014 - 14:56:03 - перейти к сообщению
LIME пишет:
еще раз- надо исправлять...в данной ситуации решить проблему невозможно


Возможно. Я решил.

 

Powered by ExBB FM 1.0 RC1