Sort and find closest time from current time

excel find closest future date
excel find closest date with criteria
excel find closest date based on criteria
excel find next date based on criteria
find closest number in sorted array
vlookup closest date after
excel find the closest value in a range
find closest number in array java

I have an array of times

    ["10:00 PM", "08:00 AM", "12:00 AM", "01:00 AM", "12:00 PM", 
     "03:00 AM", "07:00 AM", "06:00 PM"]

I want to sort them and find the nearest time from the current time, For example, Assume the time is now 05:00 PM, the above array should return the 06:00 PM as response.

i can able to sort them with below code

    let sortedArray = arrayOfData.sort(function (a, b) {
    return parseInt(a.substring(0, 2)) - 
    parseInt(b.substring(0, 2));
    }) 

Can some one suggest a way to sort it properly and also to find the closest time from using the current time? Thanks in advance


Just add the difference between current hour and array hours in a separate array and sort it ascending and get the first element from array this will be the most appropriate hour.

Check the following snippet:

times = ["10:00 PM","7:00 PM", "08:00 AM", "12:00 AM", "01:00 AM", "12:00 PM", 
     "03:00 AM", "07:00 AM", "06:00 PM"];

const currentTime = new Date();
const timeDiff = [];

times.sort((a, b) => {
  return a.indexOf('PM');
})

times.filter(time => {
  const _meridianPosition = time.indexOf('AM') > -1 ? 'AM' : 'PM';

  let _time = parseInt(time);

    if(_meridianPosition === 'PM' && _time !== 12) {
      _time += 12;
    } else if(_meridianPosition === 'AM' && _time === 12) {
      _time = 0;
    }

    const k = Math.abs(currentTime.getHours() - _time);
     timeDiff.push({hour: time, diff: k});
});

timeDiff.sort((a,b) => {
  return a.diff - b.diff;
});

console.log(timeDiff[0].hour);

Working fiddle: https://jsbin.com/zojawagiyi/6/edit?js,console

Find closest number in array, Given an array of sorted integers. We need to find the closest value to the given number. A simple solution is to traverse through the given array and keep track of absolute difference of current element with every element. Count of substrings of length K with exactly K distinct characters · Real-time application of Data  Time Zone Converter – Time Difference Calculator Provides time zone conversions taking into account Daylight Saving Time (DST), local time zone and accepts present, past, or future dates. Start by adding a city to convert from:


I think this code will do the work. You can try this.

let currentTime = new Date();
let currentHour = parseInt(currentTime.getHours());
let availableDates = ["10:00 PM", "08:00 AM", "12:00 AM", "01:00 AM", "12:00 PM", "03:00 AM", "07:00 AM", "06:00 PM"];
let convertedHours = availableDates.map((date) => {
    let time = parseInt(date.split(' ')[0]);
    let period = date.split(' ')[1];
      
    if(time === 12 && period === 'PM' )
      return time;
      
    if(time < 12 && period === 'AM')
      return time; 
    
    return time + 12;
});

let getNearestTime = (convertedHours, currentHour) => {
    let nearestTime;
    let minValue = convertedHours[0] > currentHour ? (convertedHours[0] - currentHour) : (currentHour - convertedHours[0]);
    convertedHours.reduce((minVal, hour) => {
        let hourDiff = (currentHour > hour) ? currentHour - hour : hour - currentHour;
        if(hourDiff <= minVal) {
            nearestTime = hour;
            return hourDiff;
        } else {
            return minVal;
        }
        
    }, minValue)

    return availableDates[convertedHours.indexOf(nearestTime)];
};
 

console.log(getNearestTime(convertedHours, currentHour));

Lookup the nearest date, Sort count freq. condi. Count overlap. days(2) Lookup the nearest date. Author: Oscar Step 1 - Subtract dates with search date. B3:B12-$E$2 Step 3 - Find smallest numerical value in array. The MIN find-nearest-date.xls Hope I have made myself amply clear this time waiting for your response. C# Closest Date (Find Dates Nearest in Time) To begin, this program creates a List of 4 DateTime instances. Next, it prints the result of the Closest () method. The Closest method first sorts the DateTime list in an ascending way (low to high). Next: It compares each DateTime to the following one.


You can use the solution below, that sort the array and after this find the nearest date from the current time.

First, the code adds the current time together with the array, and after this it gets the nearest date.

let dates = ["10:00 PM", "08:00 AM", "12:00 AM", "01:00 AM", "12:00 PM", "03:00 AM", "07:00 AM", "06:00 PM"];

let currentDate = new Date();
let currentTime = currentDate.getHours() + ':' + currentDate.getMinutes() + (currentDate.getHours() > 12 ? ' PM' : ' AM');

dates.push(currentTime);

dates = dates.sort(function(d1, d2) {
  return compareDates(d1, d2);
});

console.log(dates);

console.log(nearestDate(dates, currentTime));

function nearestDate(dates, current) {
  let currentIndex = dates.indexOf(current);
  
  if(currentIndex == 0) {
    return dates[currentIndex + 1];
  } else if (currentIndex == dates.length - 1) {
    return dates[currentIndex - 1];
  }
  
  let previousDate = dates[currentIndex - 1]; 
  let nextDate = dates[currentIndex + 1];

  let previousDiff = diffDates(previousDate, currentTime);
  let nextDiff = diffDates(nextDate, currentTime);

  if(previousDiff < nextDiff) {
    return previousDate;
  } else {
    return nextDate;
  }
}

function diffDates(d1, d2) {
  let diffHour = Math.abs(getHour(d2) - getHour(d1));
  let diffMin = Math.abs(getMin(d2) - getMin(d1));
  
  return diffHour + diffMin;
}

function compareDates(d1, d2) {
  let t1 = getHour(d1) + ':' + getMin(d1);
  let t2 = getHour(d2) + ':' + getMin(d2);
  
  if (getHour(d1) == getHour(d2)
      && getMin(d1) < getMin(d2)) {
    return -1;
  } else if(getHour(d1) == getHour(d2)
            && getMin(d1) > getMin(d2)) {
    return 1;
  }
  
  if (getHour(d1) < getHour(d2)) {
    return -1;
  }
  
  if (getHour(d1) > getHour(d2)) {
    return 1;
  }
  
  return 0;
}

function getHour(d) {
  let hour = parseInt(d.split(' ')[0].split(':')[0], 10);
  if (d.split(' ')[1] === 'PM' && !(hour == 12)) {
    hour += 12;
  }
  return hour;
}

function getMin(d) {
  return parseInt(d.split(' ')[0].split(':')[1], 10);
}

Closest date to another - MATLAB Answers, I have the code below which compares and extract the closest date & time in data1 to data2. be to loop through the dates in date1, find the closest date in date2, and dates1 = datetime(2019,1,1)+days(sort(randi(364,1,100))); As you know, for the current code, if I have 2/1/2016 11:42, 2/1/2016 11:43,  I want to sort them and find the nearest time from the current time, For example, Assume the time is now 05:00 PM, the above array should return the 06:00 PM as response. i can able to sort them with below code. let sortedArray = arrayOfData.sort(function (a, b) { return parseInt(a.substring(0, 2)) - parseInt(b.substring(0, 2)); })


You can try this small code.

   var timeSrc = ["10:00 PM", "08:00 AM", "11:05 AM", "12:00 AM", "01:00 AM", "12:00 PM", 
     "03:00 AM", "07:00 AM", "06:00 PM"];
    var curDate = new Date();
    curDate = curDate.toDateString();
    var times = timeSrc.map((t) => {
      return new Date(curDate + " " + t); // Make the time as a datetime with current date.
    });
    var now = new Date();
    var min = Math.abs(now - times[0]);
    var result = '';
    //Get the difference of each time with current time. The minimum difference is the closest.
    for(let i = 1; i < times.length; i++) {
      if (Math.abs(now - times[i]) <= min) {
          min = Math.abs(now - times[i]);
          result = timeSrc[i];
       }
    }
    console.log(result);

Python Algorithms: Mastering Basic Algorithms in the Python Language, The structure of the algorithm follows almost directly from the (merge sort-like) recursively find the closest pair in each, and then—in linear time—merge the total in such a slice, which means our current point at most needs to be compared​  Finding the future closest date to today in Excel. In this section, we will show you how to find the future closest date to today in Excel. 1. Select the blank cell B2, copy and paste formula =MIN(IF(A2:A18>TODAY(),A2:A18)) into the Formula Bar, and then press Ctrl + Shift + Enter keys simultaneously.


I tried a different/more intuitive approach than the ones I see here. It might be a little longer than some, but it's more clear in what it's doing in my opinion. The code works as you can check in the fiddle. Here is the code:

var times = ["10:00 PM", "08:00 AM", "12:00 AM", "01:00 AM", "12:00 PM", 
 "03:00 AM", "07:00 AM", "06:00 PM"];

//Sort the array
times.sort(function (a, b) {
return new Date('1970/01/01 ' + a) - new Date('1970/01/01 ' + b);
});

//Test Sorted Array
console.log(times);

var testTime = "05:00 PM";

function findNearestTime(times, currentTime) {

//Copy given array to new array
var allTimes = times.slice();

//Push current time to new arrray
allTimes.push(currentTime);

//Sort New array
allTimes.sort(function (a, b) {
return new Date('1970/01/01 ' + a) - new    Date('1970/01/01 ' + b);
});

//Nearest time will be either the item to the left or to the right of currentTime since array is sorted
//Now we just find which one is the closest
var indexOfCurrent = allTimes.indexOf(currentTime);

if (indexOfCurrent == 0) { //if current is first element, nearest will be item 
//after first element
return allTimes.slice(indexOfCurrent + 1, indexOfCurrent + 2 );
}else if (indexOfCurrent == allTimes.length - 1) { //current is last one, 
//nearest will be the item before current
return allTimes.slice(allTimes.length - 2, indexOfCurrent);
}else { //if neither case above, this is where magic happens
//Find the diff between left/right adjacent element and the current element in the new sorted array 
var currTime = new Date("01/01/2018 " + currentTime).getHours();

var currTimeLower = new Date("01/01/2018 " + allTimes.slice(indexOfCurrent - 1, 
indexOfCurrent)).getHours();

var currTimeUpper = new Date("01/01/2018 " + allTimes.slice(indexOfCurrent + 1, 
indexOfCurrent + 2)).getHours();

var leftDiff  = currTime - currTimeLower;
var rightDiff = currTimeUpper - currTime;

if(leftDiff < rightDiff) {
  return allTimes.slice(indexOfCurrent - 1, indexOfCurrent);
}
else {
  return allTimes.slice(indexOfCurrent + 1, indexOfCurrent + 2);
}

};
}

console.log(findNearestTime(times, testTime));

Here is the working fiddle. I tested with different times and it works. https://jsfiddle.net/b36fxpqr/13/

How to find the closest date to today on a list in Excel?, There are two situations, one is finding the past closest date to today, and the Save 50% of your time, and reduce thousands of mouse clicks for you every day! I have 2 columns, one has couple dates such as 2/15/2006, 5/10/2006, 5/15/2006, 5/20/2006, 8/15/2006, and 10/15/2006, the other one has a value of 6/15/2006. I want to find the closest date before 6/15/2006. Could you please help me out with this problem? Thanks in advance. Best regards, Haminh


Using moment to find the next time / event · Issue #3297 · moment , Does moment.js have a function to determine the next time / date out of an array of times. Example: Current Time: 10/07/2016 15:19 Array: { 1: "10/07/2016 10:20", moment(s, "MM/DD/YYYY HH:mm"); }) .sort(function(m){ return m. and after and selected the closest ones to represent next and previous. Find nearest value greater than. Select a blank cell which you will put the lookup result, type this formula =MIN(IF(A1:B6>E1,A1:B6)), and press Shift + Ctrl + Enter keys simultaneously. See screenshot: In the formula, A1:B6 is the range you want to find value, E1 is the value you look up.


Find the closest date in an array of dates · GitHub, gistfile1.rb. # I have an array of dates (both past and present) and a single date ('​needle' below),. # for which I want to find the closest date in either direction.


Find the Closest Date to Today in Google Sheets, But your list of dates can be in sorted or unsorted order. The formulas that I am going to provide you are usable in any list irrespective of the order. Here are the