datetimefilter.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. if (!defined("CONFIG")) die("Not defined");
  3. $date_shift = getParam('date_shift', $page_url, 'h');
  4. $date_start = getParam('date_start', $page_url, '');
  5. $date_stop = getParam('date_stop', $page_url, ''); // Исправлено: было 'date_start'
  6. // Инициализация переменных
  7. $datetime_start = null;
  8. $datetime_stop = null;
  9. $time_start = null;
  10. $time_stop = null;
  11. $date1 = '';
  12. $date2 = '';
  13. if (empty($date_start) || empty($date_stop)) {
  14. // Устанавливаем конечную дату = текущее время
  15. $datetime_stop = new DateTime();
  16. $date2 = $datetime_stop->format('Y-m-d H:i');
  17. $time_stop = $datetime_stop->getTimestamp();
  18. // Устанавливаем начальную дату в зависимости от сдвига
  19. $datetime_start = clone $datetime_stop;
  20. switch ($date_shift) {
  21. case 'h':
  22. $datetime_start->modify('-1 hour');
  23. break;
  24. case '8h':
  25. $datetime_start->modify('-8 hours');
  26. break;
  27. case 'd':
  28. $datetime_start->modify('-1 day');
  29. break;
  30. case 'm':
  31. $datetime_start->modify('-1 month');
  32. break;
  33. case '-':
  34. default:
  35. $datetime_start->modify('-1 day'); // значение по умолчанию
  36. break;
  37. }
  38. $time_start = $datetime_start->getTimestamp();
  39. $date1 = $datetime_start->format('Y-m-d H:i');
  40. } else {
  41. // Если даты переданы, парсим их
  42. $datetime_start = GetDateTimeFromString($date_start);
  43. if ($datetime_start) {
  44. $date1 = $datetime_start->format('Y-m-d H:i');
  45. $time_start = $datetime_start->getTimestamp();
  46. }
  47. $datetime_stop = GetDateTimeFromString($date_stop);
  48. if ($datetime_stop) {
  49. $date2 = $datetime_stop->format('Y-m-d H:i');
  50. $time_stop = $datetime_stop->getTimestamp();
  51. }
  52. }
  53. // Защита от невалидных дат
  54. if (!$datetime_start || !$datetime_stop) {
  55. // Устанавливаем значения по умолчанию при ошибке
  56. $datetime_stop = new DateTime();
  57. $datetime_start = clone $datetime_stop;
  58. $datetime_start->modify('-1 day');
  59. $date1 = $datetime_start->format('Y-m-d H:i');
  60. $date2 = $datetime_stop->format('Y-m-d H:i');
  61. $time_start = $datetime_start->getTimestamp();
  62. $time_stop = $datetime_stop->getTimestamp();
  63. }
  64. // Проверяем что начальная дата не позже конечной
  65. if ($time_start > $time_stop) {
  66. // Меняем даты местами если нужно
  67. list($time_start, $time_stop) = [$time_stop, $time_start];
  68. list($date1, $date2) = [$date2, $date1];
  69. list($datetime_start, $datetime_stop) = [$datetime_stop, $datetime_start];
  70. }
  71. $days_shift = ceil(($time_stop - $time_start) / 86400);
  72. // Сохраняем в сессии
  73. $_SESSION[$page_url]['date_start'] = $date1;
  74. $_SESSION[$page_url]['date_stop'] = $date2;
  75. $_SESSION[$page_url]['date_shift'] = $date_shift;
  76. ?>
  77. <script>
  78. function SetDateShiftCustom() {
  79. document.getElementById('date_shift').value='-';
  80. }
  81. function updateDates() {
  82. const dateShift = document.getElementById('date_shift').value;
  83. const dateStartInput = document.getElementById('date_start');
  84. const dateStopInput = document.getElementById('date_stop');
  85. // Если выбран произвольный период - не меняем даты
  86. if (dateShift === '-') {
  87. return;
  88. }
  89. // Получаем текущую дату и время
  90. const now = new Date();
  91. // Устанавливаем конечную дату = текущее время
  92. dateStopInput.value = formatDateTimeLocal(now);
  93. // Создаем копию для начальной даты
  94. const startDate = new Date(now);
  95. // Изменяем начальную дату в зависимости от выбора
  96. switch (dateShift) {
  97. case 'h': // Последний час
  98. startDate.setHours(startDate.getHours() - 1);
  99. break;
  100. case '8h': // Последние 8 часов
  101. startDate.setHours(startDate.getHours() - 8);
  102. break;
  103. case 'd': // Последние 24 часа
  104. startDate.setDate(startDate.getDate() - 1);
  105. break;
  106. case 'm': // Последний месяц
  107. startDate.setMonth(startDate.getMonth() - 1);
  108. break;
  109. }
  110. // Устанавливаем начальную дату
  111. dateStartInput.value = formatDateTimeLocal(startDate);
  112. }
  113. // Функция для форматирования даты в формат datetime-local
  114. function formatDateTimeLocal(date) {
  115. const year = date.getFullYear();
  116. const month = String(date.getMonth() + 1).padStart(2, '0');
  117. const day = String(date.getDate()).padStart(2, '0');
  118. const hours = String(date.getHours()).padStart(2, '0');
  119. const minutes = String(date.getMinutes()).padStart(2, '0');
  120. return `${year}-${month}-${day}T${hours}:${minutes}`;
  121. }
  122. // Автоматическое обновление при загрузке страницы, если нужно
  123. /*
  124. document.addEventListener('DOMContentLoaded', function() {
  125. const dateShift = document.getElementById(date_shift).value;
  126. if (dateShift !== 'custom') {
  127. updateDates();
  128. }
  129. });
  130. */
  131. // Опционально: автоматическая отправка формы при изменении
  132. /*
  133. function updateAndSubmit() {
  134. updateDates();
  135. document.getElementById('dateForm').submit();
  136. }
  137. */
  138. </script>