You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							49 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							49 lines
						
					
					
						
							1.5 KiB
						
					
					
				var parse = require('../parse/index.js') | 
						|
 | 
						|
/** | 
						|
 * @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|String|Number} dateToCompare - the date to compare with | 
						|
 * @param {Date[]|String[]|Number[]} datesArray - the array to search | 
						|
 * @returns {Number} an index of the date closest to the given date | 
						|
 * @throws {TypeError} the second argument must be an instance of Array | 
						|
 * | 
						|
 * @example | 
						|
 * // Which date is closer to 6 September 2015? | 
						|
 * var dateToCompare = new Date(2015, 8, 6) | 
						|
 * var datesArray = [ | 
						|
 *   new Date(2015, 0, 1), | 
						|
 *   new Date(2016, 0, 1), | 
						|
 *   new Date(2017, 0, 1) | 
						|
 * ] | 
						|
 * var result = closestIndexTo(dateToCompare, datesArray) | 
						|
 * //=> 1 | 
						|
 */ | 
						|
function closestIndexTo (dirtyDateToCompare, dirtyDatesArray) { | 
						|
  if (!(dirtyDatesArray instanceof Array)) { | 
						|
    throw new TypeError(toString.call(dirtyDatesArray) + ' is not an instance of Array') | 
						|
  } | 
						|
 | 
						|
  var dateToCompare = parse(dirtyDateToCompare) | 
						|
  var timeToCompare = dateToCompare.getTime() | 
						|
 | 
						|
  var result | 
						|
  var minDistance | 
						|
 | 
						|
  dirtyDatesArray.forEach(function (dirtyDate, index) { | 
						|
    var currentDate = parse(dirtyDate) | 
						|
    var distance = Math.abs(timeToCompare - currentDate.getTime()) | 
						|
    if (result === undefined || distance < minDistance) { | 
						|
      result = index | 
						|
      minDistance = distance | 
						|
    } | 
						|
  }) | 
						|
 | 
						|
  return result | 
						|
} | 
						|
 | 
						|
module.exports = closestIndexTo
 | 
						|
 |