Tengo una serie de fechas. Tengo una fecha específica "Fecha de búsqueda". Quiero encontrar la fecha en la matriz más cercana pero menor que la Fecha de búsqueda y devolver el índice de esa fecha en la matriz.
Ejemplo: Suponga que la matriz de fechas es [8/1/21, 8/5/22, 8/5/23] , indexado 1,2,3 por ejemplo. Supongamos que mi fecha de búsqueda es 9/17/22 . La función debe encontrar la fecha 8/5/22 y devolver el índice 2 .
En Hojas de cálculo de Google, esta es simplemente la función de coincidencia: 
¿Cómo hago esto (y de manera más eficiente) en Apps Script? La función IndexOf() parece devolver solo una coincidencia exacta, lo que no funciona en este caso.
¡Gracias!
La idea sería comparar cada fecha de la matriz con la fecha de búsqueda y seleccionar la diferencia mínima absoluta que será la fecha más cercana a la fecha de búsqueda:
const checkDif = checkDates.map(d=>searchDate - d).filter(v=>v>0); const minIndex = checkDif.indexOf(Math.min(...checkDif))+1;map se usa para calcular la diferencia entre las fechas para cada fecha en la matriz de entrada.
El filtro se utiliza para seleccionar solo las diferencias positivas (es decir, las fechas que son más pequeñas que la fecha de búsqueda).
Math.min se usa para calcular el valor mínimo de la matriz de las diferencias positivas, por lo tanto, la fecha más cercana que es menor que la fecha de búsqueda.
indexOf se utiliza para calcular el índice de ese valor mínimo.
Hacemos +1 porque los índices de matriz en JavaScript comienzan desde 0 pero parece que desea que comiencen desde 1 .
Ver comentarios para mayor explicación y en caso de querer cambiar los rangos o el nombre de la hoja.
function closestDate() { const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName("Sheet1"); // name of the sheet const searchDate = sh.getRange("B4").getValue(); // search date const checkDates = sh.getRange("B1:D1").getValues().flat(); // input range const checkDif = checkDates.map(d=>searchDate - d).filter(v=>v>0); const minIndex = checkDif.indexOf(Math.min(...checkDif))+1; console.log(minIndex); // 2 sh.getRange("B5").setValue(minIndex); // return the result to B5 }Ejemplo que funciona con el fragmento de código: