durationText function
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(' ');
}