Forums / National / Russian / Тех. поддержка / Подскажите про фильтры по датам

Kopusha
#1 2021-09-22 09:30

Привет, скорее не про кота а в общем, можем ткнете носом в какой мануал толковый.

Фильтрую запрос по дате, что то наподобии:

switch ($period) {
        case 'day':
            $from = $sys['now'] - 86400;
            $to = $sys['now'];
            break;
        case 'yesterday':
            $from = $sys['now'] - 86400;
            $to = $sys['now'] - 172800;
            break;
        case 'week':
            $from = $sys['now'] - 604800;
            $to = $sys['now'];
            break;
        case 'month':
            $from = $sys['now'] - 2592000;
            $to = $sys['now'];
            break;
        case 'year'://за текущий год
            $from = $sys['now'] - 31536000;
            $to = $sys['now'];
            break;
        case 'all'://за все время
            $from = 0;
            $to = $sys['now'];
            break;
        case 'custom'://выбор дат   
$setfrom = cot_import_date('cust_from', true, false, 'G');
            $setto = cot_import_date('cust_to', true, false, 'G');
            if (!empty($setfrom) && !empty($setto))
            {
                $from = $setfrom;
                $to = $setto;
            }
            else
            {
                cot_error(cot::$L['querydatewrong'].cot::$R['code_error_separator'], '');
                $from = 0;
                $to = $sys['now'];
            }
     
            if ($setfrom <= $setto)
            {
            }
            else
            {
                cot_error(cot::$L['querydatewrong'].cot::$R['code_error_separator'], '');
                $from = 0;
                $to = $sys['now'];
            }
            break;
        default:
        //Весь час
            $from = 0;
            $to = $sys['now'];
            break;
    }
if(!empty($period))
{
    $where['period'] = "date BETWEEN {$from} AND {$to}";
}  
else
{
    $where['period'] = "date BETWEEN {$from} AND {$to}";
}

Оно естественно дает математический фильтр, для которого "год" это с 22 сент 2021 по 22 сент 2220.

case 'custom'://выбор дат   

дает +- выбрать нужный период.
Но надо сделать "за сегодня" = с 0 ночи реально сегодня (по времени системному сервера и настроек сайта - они совпадают) до 23.59 ночи этого дня

Или "за месяц" = с 1 сентября  до 22 сентября.
Может у кого то есть готовый код?
Заранее спасибо!

 

 

Alex300
#2 2021-09-22 10:14
$date = (int)date('d');
$month = (int)date('m');
$year = (int)date('Y');
$todayFrom = mktime(0,0,0, $month, $date, $year);
$todayTo = mktime(23,59,59, $month, $date, $year);
 
// OR
 
$todayTo = mktime(0,0,0, $month, $date + 1, $year);

В Cotonti есть аналогичные функции с префиксом cot_ - они учитывает временную зону сервера / пользователя.

Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!...
...Sorry for my english...
Бесплатные расширения для Cotonti: https://lily-software.com/free-scripts/
Kopusha
#3 2021-10-05 22:11

Вот тут какая загвоздка. Время у меня хранится в виде 1633471547
И тут или я не понял или меня Алексей не понял)

Мне нужно выводить статисту календарно. То есть у меня сейчас "За неделю" это за 7 дней (сегодня пятница, выводим с пятницы по пятницу).

case 'week':
    $from = $sys['now'] - 604800;
    $to = $sys['now'];
    //порівнюємо з попереднім
    $from_prev = $sys['now'] - 1209600;
    $to_prev = $sys['now'] - 604800;
    break;

Но мне поставили задачу вывести "за текущую неделю" - то есть сегодня пятница - вывожу с понедельника по пятницу, с $ponedelnik до $sys['now']
Если сегодня утро понедельника 8 утра - то за время с 00.00 до 08.00 понедельника.

И точно так же За календарный месяц и Календарный год.
Заранее спасибо!