Index: django/contrib/humanize/templatetags/humanize.py
===================================================================
--- django/contrib/humanize/templatetags/humanize.py	(revision 11178)
+++ django/contrib/humanize/templatetags/humanize.py	(working copy)
@@ -2,7 +2,7 @@
 from django.utils.encoding import force_unicode
 from django import template
 from django.template import defaultfilters
-from datetime import date
+from datetime import date, datetime
 import re
 
 register = template.Library()
@@ -80,7 +80,8 @@
     present day returns representing string. Otherwise, returns a string
     formatted according to settings.DATE_FORMAT.
     """
-    try: 
+    try:
+        tzinfo = getattr(value, 'tzinfo', None)
         value = date(value.year, value.month, value.day)
     except AttributeError:
         # Passed value wasn't a date object
@@ -88,7 +89,8 @@
     except ValueError:
         # Date arguments out of range
         return value
-    delta = value - date.today()
+    delta = value - datetime.now(tzinfo).\
+                    replace(microsecond=0, second=0, minute=0, hour=0).date()
     if delta.days == 0:
         return _(u'today')
     elif delta.days == 1:
Index: tests/regressiontests/humanize/timezone.py
===================================================================
--- tests/regressiontests/humanize/timezone.py	(revision 0)
+++ tests/regressiontests/humanize/timezone.py	(revision 0)
@@ -0,0 +1,17 @@
+from datetime import tzinfo, timedelta
+
+class FixedOffset(tzinfo):
+    """Fixed offset in hours east from UTC."""
+
+    def __init__(self, offset, name):
+        self.__offset = timedelta(hours=offset)
+        self.__name = name
+
+    def utcoffset(self, dt):
+        return self.__offset
+
+    def tzname(self, dt):
+        return self.__name
+
+    def dst(self, dt):
+        return timedelta(0)
Index: tests/regressiontests/humanize/tests.py
===================================================================
--- tests/regressiontests/humanize/tests.py	(revision 11174)
+++ tests/regressiontests/humanize/tests.py	(working copy)
@@ -59,13 +59,33 @@
         tomorrow = today + timedelta(days=1)
         someday = today - timedelta(days=10)
         notdate = u"I'm not a date value"
-
+        
         test_list = (today, yesterday, tomorrow, someday, notdate)
         someday_result = defaultfilters.date(someday)
         result_list = (_(u'today'), _(u'yesterday'), _(u'tomorrow'),
                        someday_result, u"I'm not a date value")
         self.humanize_tester(test_list, result_list, 'naturalday')
+    
+    def test_naturalday_tz(self):
+        from datetime import datetime
+        from django.contrib.humanize.templatetags.humanize import naturalday
+        from timezone import FixedOffset
+        
+        today = date.today()
+        
+        tz_one = FixedOffset(-12, 'TzOne')
+        tz_two = FixedOffset(12, 'TzTwo')
 
+        # Can be today or yesterday
+        date_one = datetime(today.year, today.month, today.day, tzinfo=tz_one)
+        naturalday_one = naturalday(date_one)
+        # Can be today or tomorrow
+        date_two = datetime(today.year, today.month, today.day, tzinfo=tz_two)
+        naturalday_two = naturalday(date_two)
+        
+        # As 24h of difference they will never be the same    
+        self.assertNotEqual(naturalday_one, naturalday_two)
+
 if __name__ == '__main__':
     unittest.main()
 
