equal
deleted
inserted
replaced
21 |
21 |
22 # import local interfaces |
22 # import local interfaces |
23 |
23 |
24 # import Zope3 packages |
24 # import Zope3 packages |
25 from zope.datetime import parseDatetimetz |
25 from zope.datetime import parseDatetimetz |
|
26 from zope.i18n import translate |
26 |
27 |
27 # import local packages |
28 # import local packages |
28 from timezone import gmtime |
29 from timezone import gmtime |
|
30 |
|
31 from ztfy.utils import _ |
29 |
32 |
30 |
33 |
31 def unidate(value): |
34 def unidate(value): |
32 """Get specified date converted to unicode ISO format |
35 """Get specified date converted to unicode ISO format |
33 |
36 |
68 @rtype: datetime |
71 @rtype: datetime |
69 """ |
72 """ |
70 if type(value) is datetime: |
73 if type(value) is datetime: |
71 return value |
74 return value |
72 return datetime(value.year, value.month, value.day) |
75 return datetime(value.year, value.month, value.day) |
|
76 |
|
77 |
|
78 def getAge(value): |
|
79 """Get age of a given datetime (including timezone) compared to current datetime (in UTC) |
|
80 |
|
81 @param value: a datetime value, including timezone |
|
82 @type value: datetime |
|
83 @return: string representing value age |
|
84 @rtype: gettext translated string |
|
85 """ |
|
86 now = gmtime(datetime.utcnow()) |
|
87 delta = now - value |
|
88 if delta.days > 60: |
|
89 return translate(_("%d months ago")) % int(round(delta.days * 1.0 / 30)) |
|
90 elif delta.days > 10: |
|
91 return translate(_("%d weeks ago")) % int(round(delta.days * 1.0 / 7)) |
|
92 elif delta.days > 2: |
|
93 return translate(_("%d days ago")) % delta.days |
|
94 elif delta.days == 2: |
|
95 return translate(_("the day before yesterday")) |
|
96 elif delta.days == 1: |
|
97 return translate(_("yesterday")) |
|
98 else: |
|
99 hours = int(round(delta.seconds * 1.0 / 3600)) |
|
100 if hours > 1: |
|
101 return translate(_("%d hours ago")) % hours |
|
102 elif delta.seconds > 300: |
|
103 return translate(_("%d minutes ago")) % int(round(delta.seconds * 1.0 / 60)) |
|
104 else: |
|
105 return translate(_("less than 5 minutes ago")) |