@@ -319,14 +319,20 @@ def naturalday(value: dt.date | dt.datetime, format: str = "%b %d") -> str:
319319 import datetime as dt
320320
321321 try :
322+ # When value is a tz-aware datetime, compute "today" in that timezone
323+ # so the comparison uses the correct local date.
324+ if isinstance (value , dt .datetime ) and value .tzinfo is not None :
325+ today = dt .datetime .now (value .tzinfo ).date ()
326+ else :
327+ today = dt .date .today ()
322328 value = dt .date (value .year , value .month , value .day )
323329 except AttributeError :
324330 # Passed value wasn't date-ish
325331 return str (value )
326332 except (OverflowError , ValueError ):
327333 # Date arguments out of range
328334 return str (value )
329- delta = value - dt . date . today ()
335+ delta = value - today
330336
331337 if delta .days == 0 :
332338 return _ ("today" )
@@ -344,18 +350,23 @@ def naturaldate(value: dt.date | dt.datetime) -> str:
344350 """Like `naturalday`, but append a year for dates more than ~five months away."""
345351 import datetime as dt
346352
353+ original_value = value
347354 try :
355+ if isinstance (value , dt .datetime ) and value .tzinfo is not None :
356+ today = dt .datetime .now (value .tzinfo ).date ()
357+ else :
358+ today = dt .date .today ()
348359 value = dt .date (value .year , value .month , value .day )
349360 except AttributeError :
350361 # Passed value wasn't date-ish
351362 return str (value )
352363 except (OverflowError , ValueError ):
353364 # Date arguments out of range
354365 return str (value )
355- delta = _abs_timedelta (value - dt . date . today () )
366+ delta = _abs_timedelta (value - today )
356367 if delta .days >= 5 * 365 / 12 :
357- return naturalday (value , "%b %d %Y" )
358- return naturalday (value )
368+ return naturalday (original_value , "%b %d %Y" )
369+ return naturalday (original_value )
359370
360371
361372def _quotient_and_remainder (
0 commit comments