duration static method

String duration(
  1. num seconds, {
  2. bool short = true,
})

Formats seconds as a human-readable duration.

Short form: '1h 2m 5s'. Long form: '1:02:05'.

Implementation

static String duration(num seconds, {bool short = true}) {
  final total = seconds.abs().floor();
  final negative = seconds < 0;
  final days = total ~/ 86400;
  final hours = (total % 86400) ~/ 3600;
  final minutes = (total % 3600) ~/ 60;
  final secs = total % 60;
  final sign = negative ? '-' : '';
  if (short) {
    final parts = <String>[];
    if (days > 0) parts.add('${days}d');
    if (hours > 0) parts.add('${hours}h');
    if (minutes > 0) parts.add('${minutes}m');
    if (secs > 0 || parts.isEmpty) parts.add('${secs}s');
    return '$sign${parts.join(' ')}';
  }
  final h = hours + days * 24;
  final mm = minutes.toString().padLeft(2, '0');
  final ss = secs.toString().padLeft(2, '0');
  return h > 0 ? '$sign$h:$mm:$ss' : '$sign$minutes:$ss';
}