toNaturalString method

String toNaturalString()

Natural-language description using the two largest non-zero units.

Unlike HumanizedDuration.toWordString, uses a space separator and limits output to two units.

const Duration(hours: 2, minutes: 3).toNaturalString(); // '2 hours 3 minutes'
const Duration(minutes: 1, seconds: 5).toNaturalString(); // '1 minute 5 seconds'
Duration.zero.toNaturalString(); // '0 seconds'

Implementation

String toNaturalString() {
  final d = Duration(microseconds: inMicroseconds.abs());
  final h = d.inHours;
  final m = d.inMinutes % 60;
  final s = d.inSeconds % 60;

  String unit(int n, String singular) => '$n ${n == 1 ? singular : '${singular}s'}';

  final parts = <String>[
    if (h > 0) unit(h, 'hour'),
    if (m > 0) unit(m, 'minute'),
    if (s > 0 || (h == 0 && m == 0)) unit(s, 'second'),
  ];

  return parts.take(2).join(' ');
}