diff --git a/containers/backupchecks/src/backend/app/__init__.py b/containers/backupchecks/src/backend/app/__init__.py index 43857f0..0bca4b2 100644 --- a/containers/backupchecks/src/backend/app/__init__.py +++ b/containers/backupchecks/src/backend/app/__init__.py @@ -63,6 +63,57 @@ def create_app(): app.register_blueprint(auth_bp) app.register_blueprint(main_bp) + @app.template_filter("local_datetime") + def format_local_datetime(utc_dt, format="%Y-%m-%d %H:%M:%S"): + """Convert UTC datetime to UI timezone and format as string. + + Args: + utc_dt: datetime object in UTC (or None) + format: strftime format string (default: '%Y-%m-%d %H:%M:%S') + + Returns: + Formatted datetime string in UI timezone, or empty string if input is None + """ + if utc_dt is None: + return "" + + from datetime import datetime + + try: + from zoneinfo import ZoneInfo + except ImportError: + ZoneInfo = None # type: ignore + + # Get UI timezone from settings + tz_name = "Europe/Amsterdam" + try: + from .models import SystemSettings + + settings = SystemSettings.query.first() + if settings and getattr(settings, "ui_timezone", None): + tz_name = settings.ui_timezone + except Exception: + pass + + # Convert UTC to UI timezone + if ZoneInfo: + try: + utc_tz = ZoneInfo("UTC") + local_tz = ZoneInfo(tz_name) + + # Ensure utc_dt is timezone-aware (assume UTC if naive) + if utc_dt.tzinfo is None: + utc_dt = utc_dt.replace(tzinfo=utc_tz) + + # Convert to local timezone + local_dt = utc_dt.astimezone(local_tz) + return local_dt.strftime(format) + except Exception: + pass + + # Fallback: return UTC time if conversion fails + return utc_dt.strftime(format) + @app.before_request def _redirect_to_dashboard_on_first_open_each_day(): """Redirect the first authenticated page view of the day to the dashboard. diff --git a/containers/backupchecks/src/templates/main/admin_all_mail.html b/containers/backupchecks/src/templates/main/admin_all_mail.html index c871b97..c822c40 100644 --- a/containers/backupchecks/src/templates/main/admin_all_mail.html +++ b/containers/backupchecks/src/templates/main/admin_all_mail.html @@ -126,7 +126,7 @@ {% if rows %} {% for row in rows %}