Ticket #7201: 7201.diff
File 7201.diff, 8.0 KB (added by , 16 years ago) |
---|
-
django/utils/timesince.py
27 27 ) 28 28 # Convert datetime.date to datetime.datetime for comparison 29 29 if d.__class__ is not datetime.datetime: 30 d = datetime.datetime(d.year, d.month, d.day) 31 if now: 32 t = now.timetuple() 30 d = datetime.datetime(d.year, d.month, d.day) 31 32 if now: 33 # give a date without tzinfo the tzinfo of the other date 34 if d.tzinfo and not now.tzinfo: 35 t = now.timetuple() 36 now = datetime.datetime(t[0], t[1], t[2], t[3], t[4], t[5], tzinfo=LocalTimezone(d)) 37 elif not d.tzinfo and now.tzinfo: 38 t = d.timetuple() 39 d = datetime.datetime(t[0], t[1], t[2], t[3], t[4], t[5], tzinfo=LocalTimezone(now)) 33 40 else: 34 t = time.localtime() 35 if d.tzinfo: 36 tz = LocalTimezone(d) 37 else: 38 tz = None 39 now = datetime.datetime(t[0], t[1], t[2], t[3], t[4], t[5], tzinfo=tz) 40 41 # assigns now a tz only if d has tzinfo 42 if d.tzinfo: 43 now = datetime.datetime.now(LocalTimezone(d)) 44 else: 45 now = datetime.datetime.now() 46 41 47 # ignore microsecond part of 'd' since we removed it from 'now' 42 48 delta = now - (d - datetime.timedelta(0, 0, d.microsecond)) 43 49 since = delta.days * 24 * 60 * 60 + delta.seconds … … 62 68 Like timesince, but returns a string measuring the time until 63 69 the given time. 64 70 """ 65 if now == None: 66 now = datetime.datetime.now() 71 if not now: 72 # assigns now a tz only if d has tzinfo 73 if d.tzinfo: 74 now = datetime.datetime.now(LocalTimezone(d)) 75 else: 76 now = datetime.datetime.now() 67 77 return timesince(now, d) -
django/template/defaultfilters.py
649 649 650 650 def timeuntil(value, arg=None): 651 651 """Formats a date as the time until that date (i.e. "4 days, 6 hours").""" 652 from django.utils.timesince import time since652 from django.utils.timesince import timeuntil 653 653 from datetime import datetime 654 654 if not value: 655 655 return u'' 656 if arg: 657 return timesince(arg, value) 658 return timesince(datetime.now(), value) 656 return timeuntil(value, arg) 657 659 658 timeuntil.is_safe = False 660 659 661 660 ################### -
tests/regressiontests/templates/filters.py
9 9 10 10 from datetime import datetime, timedelta 11 11 12 from django.utils.tzinfo import LocalTimezone 12 from django.utils.tzinfo import LocalTimezone, FixedOffset 13 13 from django.utils.safestring import mark_safe 14 14 15 15 # These two classes are used to test auto-escaping of __unicode__ output. … … 20 20 class SafeClass: 21 21 def __unicode__(self): 22 22 return mark_safe(u'you > me') 23 23 24 24 # RESULT SYNTAX -- 25 25 # 'template_name': ('template contents', 'context dict', 26 26 # 'expected string output' or Exception class) 27 27 def get_filter_tests(): 28 28 now = datetime.now() 29 29 now_tz = datetime.now(LocalTimezone(now)) 30 now_tz_i = datetime.now(FixedOffset((3 * 60) + 15)) # imaginary time zone 30 31 return { 31 32 # Default compare with datetime.now() 32 33 'filter-timesince01' : ('{{ a|timesince }}', {'a': datetime.now() + timedelta(minutes=-1, seconds = -10)}, '1 minute'), … … 40 41 # Check that timezone is respected 41 42 'filter-timesince06' : ('{{ a|timesince:b }}', {'a':now_tz + timedelta(hours=8), 'b':now_tz}, '8 hours'), 42 43 44 # Ensures that differing timezones are calculated correctly 45 'filter-timesince07' : ('{{ a|timesince }}', {'a': now}, '0 minutes'), 46 'filter-timesince08' : ('{{ a|timesince }}', {'a': now_tz}, '0 minutes'), 47 'filter-timesince09' : ('{{ a|timesince }}', {'a': now_tz_i}, '0 minutes'), 48 'filter-timesince10' : ('{{ a|timesince:b }}', {'a': now, 'b': now_tz_i}, '0 minutes'), 49 'filter-timesince11' : ('{{ a|timesince:b }}', {'a': now, 'b': now_tz}, '0 minutes'), 50 'filter-timesince12' : ('{{ a|timesince:b }}', {'a': now_tz, 'b': now_tz_i}, '0 minutes'), 51 'filter-timesince13' : ('{{ a|timesince:b }}', {'a': now_tz_i, 'b': now}, '0 minutes'), 52 'filter-timesince14' : ('{{ a|timesince:b }}', {'a': now_tz_i, 'b': now_tz}, '0 minutes'), 53 43 54 # Default compare with datetime.now() 44 55 'filter-timeuntil01' : ('{{ a|timeuntil }}', {'a':datetime.now() + timedelta(minutes=2, seconds = 10)}, '2 minutes'), 45 56 'filter-timeuntil02' : ('{{ a|timeuntil }}', {'a':(datetime.now() + timedelta(days=1, seconds = 10))}, '1 day'), … … 49 60 'filter-timeuntil04' : ('{{ a|timeuntil:b }}', {'a':now - timedelta(days=1), 'b':now - timedelta(days=2)}, '1 day'), 50 61 'filter-timeuntil05' : ('{{ a|timeuntil:b }}', {'a':now - timedelta(days=2), 'b':now - timedelta(days=2, minutes=1)}, '1 minute'), 51 62 63 # Ensures that differing timezones are calculated correctly 64 'filter-timeuntil06' : ('{{ a|timeuntil }}', {'a': now_tz_i}, '0 minutes'), 65 'filter-timeuntil07' : ('{{ a|timeuntil:b }}', {'a': now_tz_i, 'b': now_tz}, '0 minutes'), 66 52 67 'filter-addslash01': ("{% autoescape off %}{{ a|addslashes }} {{ b|addslashes }}{% endautoescape %}", {"a": "<a>'", "b": mark_safe("<a>'")}, ur"<a>\' <a>\'"), 53 68 'filter-addslash02': ("{{ a|addslashes }} {{ b|addslashes }}", {"a": "<a>'", "b": mark_safe("<a>'")}, ur"<a>\' <a>\'"), 54 69 -
tests/regressiontests/utils/timesince.py
1 1 """ 2 2 >>> from datetime import datetime, timedelta 3 >>> from django.utils.timesince import timesince 3 >>> from django.utils.timesince import timesince, timeuntil 4 >>> from django.utils.tzinfo import LocalTimezone, FixedOffset 4 5 5 6 >>> t = datetime(2007, 8, 14, 13, 46, 0) 6 7 … … 74 75 u'0 minutes' 75 76 >>> timesince(t, t-4*oneday-5*oneminute) 76 77 u'0 minutes' 78 79 # When using two different timezones. 80 >>> now = datetime.now() 81 >>> now_tz = datetime.now(LocalTimezone(now)) 82 >>> now_tz_i = datetime.now(FixedOffset((3 * 60) + 15)) 83 >>> timesince(now, now_tz) 84 u'0 minutes' 85 >>> timesince(now, now_tz_i) 86 u'0 minutes' 87 >>> timesince(now_tz, now_tz_i) 88 u'0 minutes' 89 >>> timesince(now_tz, now) 90 u'0 minutes' 91 >>> timeuntil(now, now_tz) 92 u'0 minutes' 93 >>> timeuntil(now, now_tz_i) 94 u'0 minutes' 95 >>> timeuntil(now_tz, now_tz_i) 96 u'0 minutes' 97 >>> timeuntil(now_tz, now) 98 u'0 minutes' 77 99 """ -
docs/templates.txt
1763 1763 June 2006, and ``comment_date`` is a date instance for 08:00 on 1 June 2006, 1764 1764 then ``{{ comment_date|timesince:blog_date }}`` would return "8 hours". 1765 1765 1766 If the optional argument is used, a date will assume the timezone of the 1767 other if one has timezone information and the other does not. 1768 1766 1769 Minutes is the smallest unit used, and "0 minutes" will be returned for any 1767 1770 date that is in the future relative to the comparison point. 1768 1771 … … 1778 1781 the comparison point (instead of *now*). If ``from_date`` contains 22 June 1779 1782 2006, then ``{{ conference_date|timeuntil:from_date }}`` will return "1 week". 1780 1783 1784 If the optional argument is used, a date will assume the timezone of the 1785 other if one has timezone information and the other does not. 1786 1781 1787 Minutes is the smallest unit used, and "0 minutes" will be returned for any 1782 1788 date that is in the past relative to the comparison point. 1783 1789