Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как сделать "сегодня", "вчера"?
 
 автор: а-я   (25.05.2008 в 10:05)   письмо автору
 
 

ВСЕМ ПРИВЕТ! =)

Помогите, если не трудно:

из БД приходит время.

теперь надо сделать функцию чтоб она отдавала:
если сообщение оставлено сегодня, вместо времени писалось "сегодня",
если вчера, то соответственно "вчера",
а если большее время, то просто ставилась дата.

Я сначала сделал через Мускул

SELECT ....

CONCAT(
       DATE_FORMAT(time,"%k:%i:%s "),
       CASE DAYOFMONTH(time)
        WHEN DAYOFMONTH(NOW()) 
         THEN "(сегодня)" 
        WHEN DAYOFMONTH(NOW())-1 
         THEN "(вчера)" 
        ELSE 
         DATE_FORMAT(time,"(%d %b)")
       END) 
as `time`

FROM  ....


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

Если, через мускул будет правильней. То проверьте, правильно я написал или нет.

Заранее спасибо.

   
 
 автор: BinLaden   (25.05.2008 в 10:07)   письмо автору
 
   для: а-я   (25.05.2008 в 10:05)
 

> WHEN DAYOFMONTH(NOW())-1
А если будет 1-ое число месяца?

   
 
 автор: а-я   (25.05.2008 в 10:24)   письмо автору
 
   для: BinLaden   (25.05.2008 в 10:07)
 

=) кажись про эту ошибку я и говорил)

а как тогда лучше?

   
 
 автор: BinLaden   (25.05.2008 в 10:52)   письмо автору
 
   для: а-я   (25.05.2008 в 10:24)
 

Можно сделать так:

SET @today = TO_DAYS(NOW()), @yesterday = TO_DAYS(TIMESTAMP(NOW(), '-24:00:00'));


SELECT ...

CONCAT( 
       DATE_FORMAT(`time`, "%k:%i:%s "), 
       CASE TO_DAYS(`time`) 
        WHEN @today 
         THEN "(сегодня)"  
        WHEN @yesterday 
         THEN "(вчера)"  
        ELSE  
         DATE_FORMAT(`time`, "(%d %b)") 
       END)
as `time`;

FROM ...


P.S. TO_DAYS() нужно, чтобы отличать реальные "сегодняшние" и "вчерашние" даты от других с таким же номером дня в месяце.

   
 
 автор: а-я   (25.05.2008 в 10:58)   письмо автору
 
   для: BinLaden   (25.05.2008 в 10:52)
 

Да... Большое спасибо. =) так намного лучше...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования