Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

how to find the nearest date in an array?

I have an array of dates.

['2023-06-02T00:00:00.000+03:00','2023-06-02T00:00:00.000+03:00','2023-12-04T00:00:00.000+03:00']

I need that when switching in the date component, I compare the selected date with the given array and give the nearest date if I switched to the right or left
I started making a method. But I don’t understand how to compare this in a cycle

to the left – the date is less, to the right – the date is more

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

 const dateSwitch = (prev: boolean) => {
    let newDate: string = DateTime.fromJSDate(new Date()).startOf("day")
    if (enabledDates.value.length) {
      if (prev) enabledDates.value.forEach((enableDateFromArr,idx) => {
        const enableDate = DateTime.fromISO(enableDateFromArr).startOf("day").toISO()
        const compare = enableDate >= date.value
      }) 
    } 
    }
  }

>Solution :

Convert the selected date and the dates in the array using the DateTime.fromISO(). Then, iterate over the array of dates and calculate the difference between each date and the selected date. Using reduce(), find the index of the date with the smallest difference and return the date at the index with the smallest difference.

const dateSwitch = (prev: boolean) => {
 let newDate: string = DateTime.fromJSDate(new Date()).startOf("day").toISO();
 if (enabledDates.value.length) {
   let selectedDate = DateTime.fromISO(newDate);
   let dates = enabledDates.value.map(date => DateTime.fromISO(date));
   let differences = dates.map(date => selectedDate.diff(date, 'days').days);
   let minIndex = differences.reduce((minIndex, diff, index) => diff < differences[minIndex] ? index : minIndex, 0);
   return dates[minIndex].toISO();
 }
}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading