Forumlar / 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 понедельника.

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