humanize method

String humanize({
  1. bool precise = false,
})

Formats the duration as a human-readable string.

Implementation

String humanize({bool precise = false}) {
  if (isZero) return '0 seconds';

  final parts = <String>[];

  if (years > 0) {
    parts.add('$years ${years == 1 ? 'year' : 'years'}');
  }
  if (months > 0) {
    parts.add('$months ${months == 1 ? 'month' : 'months'}');
  }
  if (weeks > 0 && !precise) {
    parts.add('$weeks ${weeks == 1 ? 'week' : 'weeks'}');
  } else if (days > 0) {
    parts.add('$days ${days == 1 ? 'day' : 'days'}');
  }
  if (hours > 0) {
    parts.add('$hours ${hours == 1 ? 'hour' : 'hours'}');
  }
  if (minutes > 0) {
    parts.add('$minutes ${minutes == 1 ? 'minute' : 'minutes'}');
  }
  if (seconds > 0 || parts.isEmpty) {
    parts.add('$seconds ${seconds == 1 ? 'second' : 'seconds'}');
  }

  if (parts.length == 1) return parts.first;
  if (parts.length == 2) return '${parts[0]} and ${parts[1]}';

  final last = parts.removeLast();
  return '${parts.join(', ')}, and $last';
}