humanize method
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';
}