Added age method that takes a timestamp and return a string of how long ago the date is
authorMaran <maran.hidskes@gmail.com>
Sun, 9 Dec 2012 12:39:05 +0000 (13:39 +0100)
committerMaran <maran.hidskes@gmail.com>
Sun, 9 Dec 2012 12:39:05 +0000 (13:39 +0100)
lib/util.py

index 33cfaef..393d2c9 100644 (file)
@@ -1,8 +1,54 @@
 import os, sys
 import platform
-
+from datetime import datetime
 is_verbose = True
 
+# Takes a timestamp and puts out a string with the approxomation of the age
+def age(from_date, since_date = None, target_tz=None, include_seconds=False):
+  from_date = datetime.fromtimestamp(from_date)
+  if since_date is None:
+    since_date = datetime.now(target_tz)
+
+  distance_in_time = since_date - from_date
+  distance_in_seconds = int(round(abs(distance_in_time.days * 86400 + distance_in_time.seconds)))
+  distance_in_minutes = int(round(distance_in_seconds/60))
+
+
+  if distance_in_minutes <= 1:
+    if include_seconds:
+      for remainder in [5, 10, 20]:
+        if distance_in_seconds < remainder:
+          return "less than %s seconds ago" % remainder
+        if distance_in_seconds < 40:
+          return "half a minute"
+        elif distance_in_seconds < 60:
+          return "less than a minute ago"
+        else:
+          return "1 minute ago"
+      else:
+        if distance_in_minutes == 0:
+          return "less than a minute ago"
+        else:
+          return "1 minute ago"
+  elif distance_in_minutes < 45:
+    return "%s minutes ago" % distance_in_minutes
+  elif distance_in_minutes < 90:
+    return "about 1 hour ago"
+  elif distance_in_minutes < 1440:
+    return "about %d hours ago" % (round(distance_in_minutes / 60.0))
+  elif distance_in_minutes < 2880:
+    return "1 day ago"
+  elif distance_in_minutes < 43220:
+    return "%d days ago" % (round(distance_in_minutes / 1440))
+  elif distance_in_minutes < 86400:
+    return "about 1 month ago"
+  elif distance_in_minutes < 525600:
+    return "%d months ago" % (round(distance_in_minutes / 43200))
+  elif distance_in_minutes < 1051200:
+    return "about 1 year ago"
+  else:
+    return "over %d years ago" % (round(distance_in_minutes / 525600))
+
 def set_verbosity(b):
     global is_verbose
     is_verbose = b