median method
Calculates and returns the median (middle) DateTime from an iterable.
Ignores null values. If the list has an even number of elements, the
average of the two middle dates is returned. Returns null if the
iterable is null or contains no valid dates.
Implementation
DateTime? median(Iterable<DateTime?>? dates) {
if (dates == null) return null;
final filteredDates = dates.whereType<DateTime>().toList()..sort();
if (filteredDates.isEmpty) return null;
final middleIndex = filteredDates.length ~/ 2;
if (filteredDates.length.isOdd) {
return filteredDates[middleIndex];
} else {
final medianMs =
(filteredDates[middleIndex - 1].millisecondsSinceEpoch +
filteredDates[middleIndex].millisecondsSinceEpoch) ~/
2;
return DateTime.fromMillisecondsSinceEpoch(medianMs);
}
}