diff --git a/seahub/base/templatetags/seahub_tags.py b/seahub/base/templatetags/seahub_tags.py index 2b51f4f178..2c968c0466 100644 --- a/seahub/base/templatetags/seahub_tags.py +++ b/seahub/base/templatetags/seahub_tags.py @@ -242,29 +242,39 @@ def translate_commit_desc_escape(value): return return_value @register.filter(name='translate_seahub_time') -def translate_seahub_time(value): - """Translate seahub time to human friendly format instead of timestamp""" - +def translate_seahub_time(value, autoescape=None): if isinstance(value, int) or isinstance(value, long): # check whether value is int - val_ts = value try: - val = datetime.fromtimestamp(val_ts) # convert timestamp to datetime + val = datetime.fromtimestamp(value) # convert timestamp to datetime except ValueError as e: return "" elif isinstance(value, datetime): - # FIXME: convert datetime to timestamp may cause problem, need a better way. - val_ts = int(time.mktime(value.timetuple())) val = value else: return value - limit = 14 * 24 * 60 * 60 # Timestamp with in two weeks will be translated + translated_time = translate_seahub_time_str(val) + if autoescape: + translated_time = escape(translated_time) + + timestring = val.isoformat() + titletime = val.strftime("%c") + + time_with_tag = '' + + return mark_safe(time_with_tag) + +def translate_seahub_time_str(val): + """Convert python datetime to human friendly format.""" + now = datetime.now() - # If current time is less than value, that means clock at user machine is + # If current time is less than `val`, that means clock at user machine is # faster than server, in this case, we just set time description to `just now` - if time.mktime(now.timetuple()) < val_ts: + if now < val: return _('Just now') + limit = 14 * 24 * 60 * 60 # Timestamp with in two weeks will be translated + delta = now - (val - dt.timedelta(0, 0, val.microsecond)) seconds = delta.seconds days = delta.days