durationFormat method
Implementation
String durationFormat({Map<DurationScale, String>? formats}) {
final thresholds = [
DurationUnit(DurationScale.SECONDS, inSeconds, 60),
DurationUnit(DurationScale.MINUTES, inMinutes, 60),
DurationUnit(DurationScale.HOURS, inHours, 24),
DurationUnit(DurationScale.DAYS, inDays, 30),
DurationUnit(DurationScale.MONTHS, inDays ~/ 30, 12),
DurationUnit(
DurationScale.YEARS, (inDays / 365.25).floor(), double.infinity),
];
for (final unit in thresholds) {
if (unit.value < unit.limit) {
final format = formats?[unit.scale] ?? defaultFormats[unit.scale]!;
return format
.replaceAll(RegExp("%SS"),
"${inSeconds.toString().i18n()} ${"acronym.datetime.seconds".i18n()}")
.replaceAll(RegExp("%mm"),
"${inMinutes.toString()} ${"acronym.datetime.minutes".i18n()}")
.replaceAll(RegExp("%HH"),
"${inHours.toString()} ${"acronym.datetime.hours".i18n()}")
.replaceAll(RegExp("%DD"),
"${inDays.toString()} ${"acronym.datetime.days".i18n()}")
.replaceAll(
RegExp("%MM"),
"${(inDays ~/ 30).toString()} ${"acronym.datetime.months".i18n([], [
(inDays ~/ 30) > 1
])}")
.replaceAll(
RegExp("%YY"),
"${(inDays / 365.25).floor().toString()} ${'acronym.datetime.years'.i18n([], [
(inDays / 365.25).floor() > 1
])}");
}
}
throw Exception("The impossible has happened");
}