diff --git a/monitoring/app.py b/monitoring/app.py index 7652bfb..f3ee481 100644 --- a/monitoring/app.py +++ b/monitoring/app.py @@ -697,16 +697,22 @@ def _ts_str(ts: float) -> str: def _parse_date(s: str, end: bool = False) -> Optional[float]: - s = (s or "").strip() + s = (s or "").strip().replace("T", " ") if not s: return None - try: - d = datetime.strptime(s, "%Y-%m-%d").replace(tzinfo=timezone.utc) - except ValueError: - return None - if end: - d += timedelta(days=1) - return d.timestamp() + # Принимаем как дату, так и дату со временем (datetime-local), всё в UTC. + for fmt, has_time in (("%Y-%m-%d %H:%M:%S", True), + ("%Y-%m-%d %H:%M", True), + ("%Y-%m-%d", False)): + try: + d = datetime.strptime(s, fmt).replace(tzinfo=timezone.utc) + except ValueError: + continue + # Для верхней границы без времени берём весь день целиком. + if end and not has_time: + d += timedelta(days=1) + return d.timestamp() + return None def _opt(value: str, current: str, label: str = "") -> str: @@ -1127,11 +1133,11 @@ def admin_dashboard( - - + + - +