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.
		
		
		
		
		
			
		
			
				
					
					
						
							47 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							47 lines
						
					
					
						
							1.4 KiB
						
					
					
				var parse = require('../parse/index.js') | 
						|
 | 
						|
/** | 
						|
 * @category Common Helpers | 
						|
 * @summary Return a date from the array closest to the given date. | 
						|
 * | 
						|
 * @description | 
						|
 * Return a date from the array closest to the given date. | 
						|
 * | 
						|
 * @param {Date|String|Number} dateToCompare - the date to compare with | 
						|
 * @param {Date[]|String[]|Number[]} datesArray - the array to search | 
						|
 * @returns {Date} the date from the array 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: 1 January 2000 or 1 January 2030? | 
						|
 * var dateToCompare = new Date(2015, 8, 6) | 
						|
 * var result = closestTo(dateToCompare, [ | 
						|
 *   new Date(2000, 0, 1), | 
						|
 *   new Date(2030, 0, 1) | 
						|
 * ]) | 
						|
 * //=> Tue Jan 01 2030 00:00:00 | 
						|
 */ | 
						|
function closestTo (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) { | 
						|
    var currentDate = parse(dirtyDate) | 
						|
    var distance = Math.abs(timeToCompare - currentDate.getTime()) | 
						|
    if (result === undefined || distance < minDistance) { | 
						|
      result = currentDate | 
						|
      minDistance = distance | 
						|
    } | 
						|
  }) | 
						|
 | 
						|
  return result | 
						|
} | 
						|
 | 
						|
module.exports = closestTo
 | 
						|
 |