convertToDateRelative static method

String convertToDateRelative(
  1. BuildContext context,
  2. DateTime dateTime, {
  3. Duration? formatAfter,
  4. Duration? timeShowNow = const Duration(seconds: 10),
})

Return a string representing format: Now, few Seconds Ago, 1 minutes ago, 2 hours ago, 3 days ago,...

Implementation

static String convertToDateRelative(
  BuildContext context,
  DateTime dateTime, {
  Duration? formatAfter,
  Duration? timeShowNow = const Duration(seconds: 10),
}) {
  final DateTime now = DateTime.now();
  final BlocArchitectureLocalizations? l10n = context.blocArchitecturel10n;
  // After now
  if (dateTime.isAfter(now)) {
    return convertToDateTime(dateTime);
  }
  // Before formatAfter
  final Duration difference = dateTime.difference(now).abs();
  if (formatAfter != null && difference >= formatAfter) {
    return convertToDateTime(dateTime);
  }
  // Less timeShowNow
  if (timeShowNow != null && difference < timeShowNow) {
    return l10n?.now ?? "now";
  }
  // Defaut
  if (difference < const Duration(minutes: 1)) {
    return l10n?.fewSecondsAgo ?? "few seconds ago";
  } else if (difference < const Duration(hours: 1)) {
    return l10n?.minutesRelative(difference.inMinutes) ?? "${difference.inMinutes} minutes ago";
  } else if (difference < const Duration(days: 1)) {
    return l10n?.hoursRelative(difference.inHours) ?? "${difference.inHours} hours ago";
  } else if (difference < const Duration(days: 30)) {
    return l10n?.daysRelative(difference.inDays) ?? "${difference.inDays} days ago";
  } else if (difference < const Duration(days: 90)) {
    return convertToDate(dateTime);
  } else {
    return convertToDateTime(dateTime);
  }
}