diff options
Diffstat (limited to 'node_modules/date-fns/esm/closestIndexTo/index.js')
| -rw-r--r-- | node_modules/date-fns/esm/closestIndexTo/index.js | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/node_modules/date-fns/esm/closestIndexTo/index.js b/node_modules/date-fns/esm/closestIndexTo/index.js new file mode 100644 index 0000000..a7c3a8f --- /dev/null +++ b/node_modules/date-fns/esm/closestIndexTo/index.js @@ -0,0 +1,61 @@ +import toDate from "../toDate/index.js"; +import requiredArgs from "../_lib/requiredArgs/index.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. + * + * @param {Date | Number} dateToCompare - the date to compare with + * @param {Array<Date> | Array<number>} datesArray - the array to search + * @returns {Number | undefined} an index of the date closest to the given date or undefined if no valid value is given + * @throws {TypeError} 2 arguments required + * + * @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 + */ +export default function closestIndexTo(dirtyDateToCompare, dirtyDatesArray) { + requiredArgs(2, arguments); + var dateToCompare = toDate(dirtyDateToCompare); + if (isNaN(Number(dateToCompare))) return NaN; + var timeToCompare = dateToCompare.getTime(); + var datesArray; + // `dirtyDatesArray` is undefined or null + if (dirtyDatesArray == null) { + datesArray = []; + + // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method + } else if (typeof dirtyDatesArray.forEach === 'function') { + datesArray = dirtyDatesArray; + + // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array + } else { + datesArray = Array.prototype.slice.call(dirtyDatesArray); + } + var result; + var minDistance; + datesArray.forEach(function (dirtyDate, index) { + var currentDate = toDate(dirtyDate); + if (isNaN(Number(currentDate))) { + result = NaN; + minDistance = NaN; + return; + } + var distance = Math.abs(timeToCompare - currentDate.getTime()); + if (result == null || distance < Number(minDistance)) { + result = index; + minDistance = distance; + } + }); + return result; +}
\ No newline at end of file |
