Estoy usando la biblioteca moment (versión "^ 2.25.3") para verificar si la fecha está entre dos fechas.
Tengo que verificar si araDate está entre dos fechas (fecha de inicio y fecha de finalización) o si araDateMinusOne está entre las fechas (fecha de inicio y fecha de finalización), pero la condición aquí es que la fecha de inicio debe ser igual a araDateMinusOne (es decir, si una fecha de inicio es sep/03 y la fecha de finalización es sep/04, no debería coincidir).
¿Alguien puede decirme qué estoy haciendo mal o por qué exactamente sucede esto?
const obj = { _id: '614c2b941e06b7003024e1df', promotedtitles: [{ title: '1' }, { title: '2' }], startdate: '2021-09-04T00:00:00.000Z', enddate: '2021-09-04T00:00:00.000Z' }; const camStartDate = moment(obj.startdate).format('YYYY-MM-DD'); // 2021-09-04 const camEndDate = moment(obj.enddate).format('YYYY-MM-DD'); // 2021-09-04 const araDate = moment('2021-09-05T00:00:00.000Z').format('YYYY-MM-DD'); // 2021-09-05 const araDateMinusOne = moment('2021-09-05T00:00:00.000Z').subtract(1, 'day').format('YYYY-MM-DD'); // 2021-09-04 console.log('check', moment(araDate).isBetween(camStartDate, camEndDate, undefined, '[]')); // false which is fine. console.log('another check', moment(araDateMinusOne).isBetween(camStartDate, camEndDate, undefined, '[)')); // this is consoling false, which is incorrect //I also have tried this as well and all the variations. console.log('another check', moment(araDateMinusOne).isBetween(camStartDate, camEndDate, 'day', '[)')); <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.25.3/moment.min.js" ></script>La razón por la que devuelve falso para verificar el rango igual y da '[)', como parámetro, la fecha de finalización tiene prioridad aquí. Y cuando está verificando la fecha de finalización, estamos dando un operador de exclusión para eso.
moment('2021-09-04').isBetween('2021-09-04', '2021-09-04', 'day', '[)'La solución a este problema es verificar que la fecha esté entre dos fechas y si la fecha de inicio es igual a esa fecha de araMinusOne.
moment(araDateMinusOne).isBetween(camStartDate, camEndDate, 'day', '[]') && moment(araDateMinusOne).isSame(camStartDate)los parámetros de inclusión deben ser []
const obj = { _id: '614c2b941e06b7003024e1df', promotedtitles: [{ title: '1' }, { title: '2' }], startdate: '2021-09-04T00:00:00.000Z', enddate: '2021-09-04T00:00:00.000Z' }; const camStartDate = moment(obj.startdate).format('YYYY-MM-DD'); // 2021-09-04 const camEndDate = moment(obj.enddate).format('YYYY-MM-DD'); // 2021-09-04 const araDate = moment('2021-09-05T00:00:00.000Z').format('YYYY-MM-DD'); // 2021-09-05 const araDateMinusOne = moment('2021-09-05T00:00:00.000Z').subtract(1, 'day').format('YYYY-MM-DD'); // 2021-09-04 console.log('check', moment(araDate).isBetween(camStartDate, camEndDate, undefined, '[]')); // false which is fine. console.log({araDateMinusOne,camStartDate, camEndDate}) console.log('another check', moment(araDateMinusOne).isBetween(camStartDate, camEndDate, undefined, '[]')); // this is consoling false, which is incorrect //I also have tried this as well and all the variations. console.log('another check 1', moment(araDateMinusOne).isBetween(camStartDate, camEndDate, 'day', '[)')); console.log('default check ', moment('2016-10-30').isBetween('2016-10-30', '2016-10-30', undefined, '[]')) <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.25.3/moment.min.js" ></script>