humanReadableTime function
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';
}
}