ztfy/utils/date.py
changeset 68 c37867f75a54
parent 48 d9a45c366c6c
child 125 dec1ba47922a
equal deleted inserted replaced
67:040090e1aa8f 68:c37867f75a54
    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"))