def distance_of_time(from_time, accuracy=1): """ Display distance of time from current time. Parameter is an accuracy level (deafult is 1). Value must be numeral (i.e. time.time() result) or datetime.datetime (i.e. datetime.datetime.now() result). Examples:: {{ some_time|distance_of_time }} {{ some_dtime|distance_of_time:2 }} """ try: to_time = None if conf.settings.USE_TZ: to_time = utils.timezone.now() res = dt.distance_of_time_in_words(from_time, accuracy, to_time) except Exception as err: # because filter must die silently try: default_distance = "%s seconds" % str(int(time.time() - from_time)) except Exception: default_distance = "" res = default_value % {'error': err, 'value': default_distance} return res
def smart_time(date): """ Cover for ru_strftime from pytils. Don't show needless part of time string """ now = timezone.now() today = now.replace(hour=0, minute=0, second=0) if date > now - datetime.timedelta(hours=2) and is_language('ru'): # from 2 hours ago to now return dt.distance_of_time_in_words(date, 1, now) elif date > today: # from start of today to 2 hours ago format = u'%H:%M' elif date > today - datetime.timedelta(days=1): # yesterday format = _('yesterday') + u', %H:%M' elif date > today - datetime.timedelta(days=2): # the day before yesterday format = _('day before yesterday') + u', %H:%M' elif date > today.replace(day=1, month=1): # this year format = u'%d %B, %H:%M' else: format = u'%d %B %Y, %H:%M' if is_language('ru'): return ru_strftime(date, format) else: return strftime(date, format)
def distance_of_time(from_time, accuracy=1): """ Display distance of time from current time. Parameter is an accuracy level (deafult is 1). Value must be numeral (i.e. time.time() result) or datetime.datetime (i.e. datetime.datetime.now() result). Examples:: {{ some_time|distance_of_time }} {{ some_dtime|distance_of_time:2 }} """ try: to_time = None if conf.settings.USE_TZ: to_time = now() res = dt.distance_of_time_in_words(from_time, accuracy, to_time) except Exception as err: # because filter must die silently try: default_distance = "%s seconds" % str(int(time.time() - from_time)) except Exception: default_distance = "" res = default_value % {"error": err, "value": default_distance} return res
def distance_of_time(from_time, accuracy=1): """ Display distance of time from current time. Parameter is an accuracy level (deafult is 1). Value must be numeral (i.e. time.time() result) or datetime.datetime (i.e. datetime.datetime.now() result). Examples:: {{ some_time|distance_of_time }} {{ some_dtime|distance_of_time:2 }} """ try: ures = dt.distance_of_time_in_words(from_time, accuracy) res = pseudo_str( ures, encoding, default_value) except Exception, err: # because filter must die silently try: default_distance = "%s seconds" % str(int(time.time() - from_time)) except Exception: default_distance = "" res = default_value % {'error': err, 'value': default_distance}
def distance_of_time(from_time, accuracy=1): """ Display distance of time from current time. Parameter is an accuracy level (deafult is 1). Value must be numeral (i.e. time.time() result) or datetime.datetime (i.e. datetime.datetime.now() result). Examples:: {{ some_time|distance_of_time }} {{ some_dtime|distance_of_time:2 }} """ try: res = utils.provide_str( dt.distance_of_time_in_words(from_time, accuracy), encoding, default=default_value) except Exception, err: # because filter must die silently try: default_distance = "%s seconds" % str(int(time.time() - from_time)) except Exception: default_distance = "" res = default_value % {'error': err, 'value': default_distance}
def lbtimesince(d, now=None): # Convert datetime.date to datetime.datetime for comparison. if not d: return '' if not isinstance(d, datetime.datetime): d = datetime.datetime(d.year, d.month, d.day) if now and not isinstance(now, datetime.datetime): now = datetime.datetime(now.year, now.month, now.day) if not now: if d.tzinfo: now = datetime.datetime.now(LocalTimezone(d)) else: now = datetime.datetime.now() if translation.get_language() == "ru": return pytils.distance_of_time_in_words(d) #ignore microsecond part of 'd' since we removed it from 'now' delta = now - (d - datetime.timedelta(0, 0, d.microsecond)) since = delta.days * 24 * 60 * 60 + delta.seconds if since // (60 * 60 * 24) < 3: return _("%s ago") % _timesince(d) return _date(d, "Y-m-d H:i")
in_future = current_time + 100000 # и datetime.datetime dt_current_time = datetime.datetime.now() dt_in_past = dt_current_time - datetime.timedelta(0, 100000) dt_in_future = dt_current_time + datetime.timedelta(0, 100000) # # У distance_of_time_in_words три параметра: # 1) from_time, время от которого считать # 2) accuracy, точность, по умолчанию -- 1 # 3) to_time, до которого времени считать, по умолчанию - сейчас # # если to_time не передано, считается от "сейчас", # и тогда -1 день -> "вчера", а +1 день -> "завтра" print_(dt.distance_of_time_in_words(in_past)) #-> вчера print_(dt.distance_of_time_in_words(dt_in_future)) #-> завтра # а вот если передано to_time, то нельзя говорить "вчера", # потому что to_time не обязательно "сейчас", # поэтому -1 день -> "1 день назад" print_(dt.distance_of_time_in_words(in_past, to_time=current_time)) #-> 1 день назад # увеличение точности отражается на результате print_(dt.distance_of_time_in_words(in_past, accuracy=2)) #-> 1 день 3 часа назад print_(dt.distance_of_time_in_words(in_past, accuracy=3)) #-> 1 день 3 часа 46 минут назад
def pub_date_delta(self, lang): if lang == Lang.ru: return distance_of_time_in_words(self.date) else: return date(self.date)
in_future = current_time + 100000 # и datetime.datetime dt_current_time = datetime.datetime.now() dt_in_past = dt_current_time - datetime.timedelta(0, 100000) dt_in_future = dt_current_time + datetime.timedelta(0, 100000) # # У distance_of_time_in_words три параметра: # 1) from_time, время от которого считать # 2) accuracy, точность, по умолчанию -- 1 # 3) to_time, до которого времени считать, по умолчанию - сейчас # # если to_time не передано, считается от "сейчас", # и тогда -1 день -> "вчера", а +1 день -> "завтра" print_(dt.distance_of_time_in_words(in_past)) #-> вчера print_(dt.distance_of_time_in_words(dt_in_future)) #-> завтра # а вот если передано to_time, то нельзя говорить "вчера", # потому что to_time не обязательно "сейчас", # поэтому -1 день -> "1 день назад" print_(dt.distance_of_time_in_words(in_past, to_time=current_time)) #-> 1 день назад # увеличение точности отражается на результате print_(dt.distance_of_time_in_words(in_past, accuracy=2)) #-> 1 день 3 часа назад print_(dt.distance_of_time_in_words(in_past, accuracy=3))
def get_datetime_distance(self): last = self.date.replace(tzinfo=utc) now = datetime.datetime.utcnow().replace(tzinfo=utc) distance = dt.distance_of_time_in_words(last, 1, now) return distance
def time_distance(value): return distance_of_time_in_words(value)