diff --git a/backend/utils/jalali_formatter.py b/backend/utils/jalali_formatter.py index 1282874..bf8beaf 100644 --- a/backend/utils/jalali_formatter.py +++ b/backend/utils/jalali_formatter.py @@ -1,17 +1,23 @@ +from datetime import date, datetime + import jdatetime from django.utils import timezone -def to_jalali(dt): - if not dt: +def to_jalali(value): + if not value: return None - dt = timezone.localtime(dt) + # Keep already-converted Jalali values untouched. + if isinstance(value, (jdatetime.datetime, jdatetime.date)): + return value - return jdatetime.datetime.fromgregorian( - year=dt.year, - month=dt.month, - day=dt.day, - hour=dt.hour, - minute=dt.minute, - second=dt.second, - ) + if isinstance(value, datetime): + if timezone.is_naive(value): + value = timezone.make_aware(value, timezone.get_current_timezone()) + value = timezone.localtime(value) + return jdatetime.datetime.fromgregorian(datetime=value) + + if isinstance(value, date): + return jdatetime.date.fromgregorian(date=value) + + raise TypeError(f"Unsupported type for to_jalali: {type(value)!r}")