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