Задавайте вопросы, мы ответим
Вы не зашли.
Данные по времени хранятся в unix.
Нужно сделать выборку по интервалам:
- за вчера,
- за 7 дней (без учета текущего дня),
- за текущий месяц
- за предыдущий месяц
- за год
- за весь срок
Я почти все набросал, но возникли проблемы с годом. Походу там нужно как-то изгаляться... и еще не совсем уверен с правильностью времени, что считать больше и меньше в началах суток... время 00:00:00 к какой дате отнести, к вчерашнему дню или сегодняшнему, грубо говоря. А как проверить время, например, у функции CURDATE(), не получается, т.е. выводит только дату, без времени.
Код написал:
// За все время
default:
$doact = 'all';
$where_filter_time = " AND FROM_UNIXTIME( db_stats.date ) < NOW()";
break;
// За вчера
case 'yesterday':
$where_filter_time = " AND FROM_UNIXTIME( db_stats.date ) > LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
AND FROM_UNIXTIME( db_stats.date ) < NOW() ";
break;
// За 7 дней
case 'week':
$where_filter_time = " AND FROM_UNIXTIME( db_stats.date ) > CURDATE() - INTERVAL 8 DAY
AND FROM_UNIXTIME( db_stats.date ) < NOW() ";
break;
// За прошлый месяц
case 'prevmonth':
$where_filter_time = " AND FROM_UNIXTIME( db_stats.date ) > LAST_DAY(CURDATE()) LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 2 MONTH
AND FROM_UNIXTIME( db_stats.date ) < LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH ";
break;
// За текущий месяц
case 'curmonth':
$where_filter_time = " AND FROM_UNIXTIME( db_stats.date ) > LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
AND FROM_UNIXTIME( db_stats.date ) < NOW() ";
break;
// За год
case 'year':
$where_filter_time = " AND FROM_UNIXTIME( db_stats.date ) > LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
AND FROM_UNIXTIME( db_stats.date ) < NOW() ";
break;
Неактивен
За год: FROM_UNIXTIME( db_stats.date ) > CURDATE() - INTERVAL 1 YEAR
За текущий год: YEAR(FROM_UNIXTIME( db_stats.date )) = YEAR(CURDATE())
Неактивен