| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- <?php
- if (!defined("CONFIG")) die("Not defined");
- $date_shift = getParam('date_shift', $page_url, 'h');
- $date_start = getParam('date_start', $page_url, '');
- $date_stop = getParam('date_stop', $page_url, '');
- // Инициализация переменных
- $datetime_start = null;
- $datetime_stop = null;
- $time_start = null;
- $time_stop = null;
- $date1 = '';
- $date2 = '';
- $shift_array = [ 'h', '8h', 'd', 'm' ];
- // если время не передано или установлен интервал сдвига - обновить время
- if (empty($date_start) || empty($date_stop) || in_array($date_shift, $shift_array)) {
- // Устанавливаем конечную дату = текущее время
- $datetime_stop = (new DateTime())->modify('+1 minute');
- $date2 = $datetime_stop->format('Y-m-d H:i');
- $time_stop = $datetime_stop->getTimestamp();
-
- // Устанавливаем начальную дату в зависимости от сдвига
- $datetime_start = clone $datetime_stop;
-
- switch ($date_shift) {
- case 'h':
- $datetime_start->modify('-1 hour');
- break;
- case '8h':
- $datetime_start->modify('-8 hours');
- break;
- case 'd':
- $datetime_start->modify('-1 day');
- break;
- case 'm':
- $datetime_start->modify('-1 month');
- break;
- case '-':
- default:
- $datetime_start->modify('-1 day'); // значение по умолчанию
- break;
- }
-
- $time_start = $datetime_start->getTimestamp();
- $date1 = $datetime_start->format('Y-m-d H:i');
-
- } else {
- // Если даты переданы, парсим их
- $datetime_start = GetDateTimeFromString($date_start);
- if ($datetime_start) {
- $date1 = $datetime_start->format('Y-m-d H:i');
- $time_start = $datetime_start->getTimestamp();
- }
-
- $datetime_stop = GetDateTimeFromString($date_stop);
- if ($datetime_stop) {
- $date2 = $datetime_stop->format('Y-m-d H:i');
- $time_stop = $datetime_stop->getTimestamp();
- }
- }
- // Защита от невалидных дат
- if (!$datetime_start || !$datetime_stop) {
- // Устанавливаем значения по умолчанию при ошибке
- $datetime_stop = (new DateTime())->modify('+1 minute');
- $datetime_start = clone $datetime_stop;
- $datetime_start->modify('-1 day');
-
- $date1 = $datetime_start->format('Y-m-d H:i');
- $date2 = $datetime_stop->format('Y-m-d H:i');
- $time_start = $datetime_start->getTimestamp();
- $time_stop = $datetime_stop->getTimestamp();
- }
- // Проверяем что начальная дата не позже конечной
- if ($time_start > $time_stop) {
- // Меняем даты местами если нужно
- list($time_start, $time_stop) = [$time_stop, $time_start];
- list($date1, $date2) = [$date2, $date1];
- list($datetime_start, $datetime_stop) = [$datetime_stop, $datetime_start];
- }
- $days_shift = ceil(($time_stop - $time_start) / 86400);
- // Сохраняем в сессии
- $_SESSION[$page_url]['date_start'] = $date1;
- $_SESSION[$page_url]['date_stop'] = $date2;
- $_SESSION[$page_url]['date_shift'] = $date_shift;
- ?>
- <script>
- function SetDateShiftCustom() {
- document.getElementById('date_shift').value='-';
- }
- function updateDates() {
- const dateShift = document.getElementById('date_shift').value;
- const dateStartInput = document.getElementById('date_start');
- const dateStopInput = document.getElementById('date_stop');
-
- // Если выбран произвольный период - не меняем даты
- if (dateShift === '-') {
- return;
- }
-
- // Получаем текущую дату и время
- const now = new Date();
-
- // Устанавливаем конечную дату = текущее время
- dateStopInput.value = formatDateTimeLocal(now);
-
- // Создаем копию для начальной даты
- const startDate = new Date(now);
-
- // Изменяем начальную дату в зависимости от выбора
- switch (dateShift) {
- case 'h': // Последний час
- startDate.setHours(startDate.getHours() - 1);
- break;
- case '8h': // Последние 8 часов
- startDate.setHours(startDate.getHours() - 8);
- break;
- case 'd': // Последние 24 часа
- startDate.setDate(startDate.getDate() - 1);
- break;
- case 'm': // Последний месяц
- startDate.setMonth(startDate.getMonth() - 1);
- break;
- }
- // Устанавливаем начальную дату
- dateStartInput.value = formatDateTimeLocal(startDate);
- }
- // Функция для форматирования даты в формат datetime-local
- function formatDateTimeLocal(date) {
- const year = date.getFullYear();
- const month = String(date.getMonth() + 1).padStart(2, '0');
- const day = String(date.getDate()).padStart(2, '0');
- const hours = String(date.getHours()).padStart(2, '0');
- const minutes = String(date.getMinutes()).padStart(2, '0');
- return `${year}-${month}-${day}T${hours}:${minutes}`;
- }
- // Автоматическое обновление при загрузке страницы, если нужно
- /*
- document.addEventListener('DOMContentLoaded', function() {
- const dateShift = document.getElementById(date_shift).value;
- if (dateShift !== 'custom') {
- updateDates();
- }
- });
- */
- // Опционально: автоматическая отправка формы при изменении
- /*
- function updateAndSubmit() {
- updateDates();
- document.getElementById('dateForm').submit();
- }
- */
- </script>
|