Пример #1
0
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
Пример #2
0
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)
Пример #3
0
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
Пример #4
0
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}
Пример #5
0
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}
Пример #6
0
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")
Пример #7
0
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 минут назад
Пример #8
0
 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))
Пример #10
0
 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
Пример #11
0
def time_distance(value):
    return distance_of_time_in_words(value)