mirror of https://github.com/snachodog/mybuddy.git
62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
from django.utils import timesince, timezone
|
|
from django.utils.translation import ngettext
|
|
|
|
|
|
def child_age_string(duration):
|
|
"""Monkey patch timesince function to day precision only.
|
|
"""
|
|
default_timesine_chunks = timesince.TIMESINCE_CHUNKS
|
|
timesince.TIMESINCE_CHUNKS = (
|
|
(60 * 60 * 24 * 365, 'year'),
|
|
(60 * 60 * 24 * 30, 'month'),
|
|
(60 * 60 * 24 * 7, 'week'),
|
|
(60 * 60 * 24, 'day'),
|
|
)
|
|
ts = timesince.timesince(duration)
|
|
timesince.TIMESINCE_CHUNKS = default_timesine_chunks
|
|
return ts
|
|
|
|
|
|
def duration_string(duration, precision='s'):
|
|
"""Format hours, minutes and seconds as a human-friendly string (e.g. "2
|
|
hours, 25 minutes, 31 seconds") with precision to h = hours, m = minutes or
|
|
s = seconds.
|
|
"""
|
|
h, m, s = duration_parts(duration)
|
|
|
|
duration = ''
|
|
if h > 0:
|
|
duration = ngettext('%(hours)s hour', '%(hours)s hours', h) % {
|
|
'hours': h
|
|
}
|
|
if m > 0 and precision != 'h':
|
|
if duration != '':
|
|
duration += ', '
|
|
duration += ngettext(
|
|
'%(minutes)s minute',
|
|
'%(minutes)s minutes',
|
|
m
|
|
) % {'minutes': m}
|
|
if s > 0 and precision != 'h' and precision != 'm':
|
|
if duration != '':
|
|
duration += ', '
|
|
duration += ngettext(
|
|
'%(seconds)s second',
|
|
'%(seconds)s seconds',
|
|
s
|
|
) % {'seconds': s}
|
|
|
|
return duration
|
|
|
|
|
|
def duration_parts(duration):
|
|
"""Get hours, minutes and seconds from a timedelta.
|
|
"""
|
|
if not isinstance(duration, timezone.timedelta):
|
|
raise TypeError('Duration provided must be a timedetla')
|
|
h, remainder = divmod(duration.seconds, 3600)
|
|
h += duration.days * 24
|
|
m, s = divmod(remainder, 60)
|
|
return h, m, s
|