| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- "use strict";
- exports.closestIndexTo = closestIndexTo;
- var _index = require("./toDate.js");
- /**
- * @name closestIndexTo
- * @category Common Helpers
- * @summary Return an index of the closest date from the array comparing to the given date.
- *
- * @description
- * Return an index of the closest date from the array comparing to the given date.
- *
- * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
- *
- * @param dateToCompare - The date to compare with
- * @param dates - The array to search
- *
- * @returns An index of the date closest to the given date or undefined if no valid value is given
- *
- * @example
- * // Which date is closer to 6 September 2015?
- * const dateToCompare = new Date(2015, 8, 6)
- * const datesArray = [
- * new Date(2015, 0, 1),
- * new Date(2016, 0, 1),
- * new Date(2017, 0, 1)
- * ]
- * const result = closestIndexTo(dateToCompare, datesArray)
- * //=> 1
- */
- function closestIndexTo(dateToCompare, dates) {
- const date = (0, _index.toDate)(dateToCompare);
- if (isNaN(Number(date))) return NaN;
- const timeToCompare = date.getTime();
- let result;
- let minDistance;
- dates.forEach(function (dirtyDate, index) {
- const currentDate = (0, _index.toDate)(dirtyDate);
- if (isNaN(Number(currentDate))) {
- result = NaN;
- minDistance = NaN;
- return;
- }
- const distance = Math.abs(timeToCompare - currentDate.getTime());
- if (result == null || distance < minDistance) {
- result = index;
- minDistance = distance;
- }
- });
- return result;
- }
|