old_contents: # -*- 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.
      """
      timesince.TIMESINCE_CHUNKS = (
          (60 * 60 * 24 * 365, 'year'),
          (60 * 60 * 24 * 30, 'month'),
          (60 * 60 * 24 * 7, 'week'),
          (60 * 60 * 24, 'day'),
      )
      return timesince.timesince(duration)
  
  
  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
  
new_contents: # -*- 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
  
subject: Revert timesince chunks after monkey patch (fixes #181)