Así que codifiqué esta función para probar si la fecha de hoy cae dentro de un rango o período determinado en función de mis dos conjuntos de días de inicio y finalización. Luego agrega el año y las pruebas. Si no puede encontrar un período, devuelve "NIR" o "Fuera del rango", de lo contrario, devuelve una cadena con el período y el año, que utilizo más adelante en mi programa para varias otras funciones.
Esta función funcionó espléndidamente y luego, al azar, comienza a devolver nada más que NIR. Intenté iniciar sesión entre cada paso e incluso puedo hacer que funcione si configuro d = Date.parse ("21 de octubre de 2021") en lugar de Date.now() funciona bien. Estoy tan confundido en cuanto a cuál es la diferencia.
function findPeriod(offset = 0) { const s = ["Aug 29", "Sept 12", "Sept 26", "Oct 10", "Oct 24", "Nov 7", "Nov 21", "Dec 5", "Dec 19", "Jan 2", "Jan 16", "Jan 30", "Feb 13", "Feb 27", "Mar 13", "Mar 27", "Apr 10", "Apr 24", "May 8", "May 22", "Jun 5", "Jun 19", "Jul 3", "Jul 17", "Jul 31", "Aug 14", "Aug 28", "Sept 11", "Sept 25"]; // Start of periods const e = ["Sept 11", "Sept 25", "Oct 9", "Oct 23", "Nov 6", "Nov 20", "Dec 4", "Dec 18", "Jan 1", "Jan 15", "Jan 29", "Feb 12", "Feb 26", "Mar 12", "Mar 26", "Apr 9", "Apr 23", "May 7", "May 21", "Jun 4", "Jun 18", "Jul 2", "Jul 16", "Jul 30", "Aug 13", "Aug 27", "Sept 10", "Sept 24", "Oct 8"]; // End of periods const y = '2021'; const p = ["Period 19", "Period 20", "Period 21", "Period 22", "Period 23", "Period 24", "Period 25", "Period 26", "Period 27", "Period 1"]; // Corresponding period const d = Date.now(); let found = " "; try { for (let i = 0; i < p.length; i++) { if (d >= Date.parse(s[i] + ', ' + y) && d <= Date.parse(e[i] + ', ' + y)) { found = p[i + offset] + " " + s[i + offset] + " to " + e[i + offset] + `, ${y}`; break; } else { found = "NIR"; } } return found; } catch (err) { console.log(err); } } console.log(findPeriod());Date.now() te da una fecha con horas, minutos y segundos. Es por eso que hoy (9 de octubre + tiempo) es mayor que el final del período que definiste.
Rápido y sucio. Obtenga la fecha sin hora convirtiéndola primero en una cadena de fecha:
const d = new Date(new Date().toDateString());Actualizar Como mencionó RobG, puede eliminar el tiempo de esta manera:
const d = new Date(); d.setHours(0,0,0,0); function findPeriod(offset = 0) { const s = ["Aug 29", "Sept 12", "Sept 26", "Oct 10", "Oct 24", "Nov 7", "Nov 21", "Dec 5", "Dec 19", "Jan 2", "Jan 16", "Jan 30", "Feb 13", "Feb 27", "Mar 13", "Mar 27", "Apr 10", "Apr 24", "May 8", "May 22", "Jun 5", "Jun 19", "Jul 3", "Jul 17", "Jul 31", "Aug 14", "Aug 28", "Sept 11", "Sept 25" ]; // Start of periods const e = ["Sept 11","Sept 25", "Oct 9", "Oct 23", "Nov 6", "Nov 20", "Dec 4", "Dec 18", "Jan 1", "Jan 15", "Jan 29", "Feb 12", "Feb 26", "Mar 12", "Mar 26", "Apr 9", "Apr 23", "May 7", "May 21", "Jun 4", "Jun 18", "Jul 2", "Jul 16", "Jul 30", "Aug 13", "Aug 27", "Sept 10", "Sept 24", "Oct 8"]; // End of periods const y = '2021'; const p = ["Period 19", "Period 20", "Period 21", "Period 22", "Period 23", "Period 24", "Period 25", "Period 26", "Period 27", "Period 1"]; // Corresponding period const d = new Date(new Date().toDateString()); let found = " "; try { for (let i = 0; i < p.length; i++) { if (d >= Date.parse(s[i]+', '+ y) && d <= Date.parse(e[i]+', '+ y)) { found = p[i+offset]+" "+s[i+offset]+" to "+e[i+offset]+`, ${y}`; break; } else { found = "NIR"; } } return found; } catch (err) { console.log(err); } } console.log(findPeriod());