durationText function

String durationText(
  1. num minutes
)

Dauer für Menschen aus ganzen Minuten: unter 1 Std. „45 Min.“, unter 1 Tag „8 Std. 32 Min.“ (bei 0 Minuten nur „8 Std.“), ab 1 Tag „1 Tag 3 Std.“ bzw. „2 Tage“ (bei 0 Stunden ohne Stunden). Negatives und Unsinn zählt als 0; Bruchteile werden abgeschnitten. Gemeinsame Fälle mit dem JS-Zwilling: shift-cases.json (durationText).

Implementation

String durationText(num minutes) {
  final gesamt = minutes.isFinite && minutes > 0 ? minutes.floor() : 0;
  final tage = gesamt ~/ 1440;
  final stunden = (gesamt % 1440) ~/ 60;
  final rest = gesamt % 60;
  final teile = <String>[];
  if (tage > 0) {
    teile.add(labelText(tage == 1 ? 'duration.days_one' : 'duration.days_other', {'days': tage}));
    if (stunden > 0) teile.add(labelText('duration.hours', {'hours': stunden}));
  } else {
    if (stunden > 0) teile.add(labelText('duration.hours', {'hours': stunden}));
    if (rest > 0 || stunden == 0) teile.add(labelText('duration.minutes', {'minutes': rest}));
  }
  return teile.join(' ');
}