durationFormat method

String durationFormat(
  1. {Map<DurationScale, String>? formats}
)

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");
}