median method

DateTime? median(
  1. Iterable<DateTime?>? dates
)

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