humanReadableTime function

String humanReadableTime(
  1. DateTime mtime, [
  2. List<String> months = months_
])

Format a given DateTime object into a human-readable time string.

using relative six-month timestamp formatting (e.g., MMM DD HH:MM for recent dates, MMM DD YYYY for older dates)

// 6 months ago, format MMM DD YYYY
print(humanReadableTime(DateTime.parse('2000-05-20 10:30:50'))); // May 20 2000
// less than 6 months, format MMM DD HH:MM
print(humanReadableTime(DateTime.parse('2037-05-20 10:30:50'))); // May 20 10:30

Implementation

String humanReadableTime(DateTime mtime, [List<String> months = months_]) {
  final mtimeLocal = mtime.toLocal();
  final now = DateTime.now().toLocal();

  // Approximate 6 months
  final sixMonthsAgo = now.subtract(const Duration(days: 180));
  final monthAbbr = months[mtimeLocal.month - 1];

  final fmtDay = mtimeLocal.day.toString().padLeft(2, '0');
  if (mtimeLocal.isAfter(sixMonthsAgo)) {
    final fmtHour = mtimeLocal.hour.toString().padLeft(2, '0');
    final fmtMinute = mtimeLocal.minute.toString().padLeft(2, '0');
    return '$monthAbbr $fmtDay $fmtHour:$fmtMinute';
  } else {
    final fmtYear = mtimeLocal.year.toString().padRight(5);
    return '$monthAbbr $fmtDay $fmtYear';
  }
}