Estoy tratando de obtener el rango de fechas del miércoles pasado al martes pasado (7 días) a partir de la fecha de hoy. Digamos que la fecha actual es 2022-05-01 (1 de mayo), espero que el resultado sea del martes pasado (fecha de finalización) al miércoles pasado (fecha de inicio = martes pasado -7 días), es decir, del 20 de abril de 2022 al 26 de abril de 2022
function getStartAndEndDates () { var now = new Date('2022-05-01'); //May 1st 2022 var day = now.getDay(); var diff = (day <= 2) ? (7 - 2 + day ) : (day - 2); var PastTuesday = new Date(); var PastWednesday = new Date(PastTuesday.setDate(now.getDate() - diff)); console.log('End date is', PastTuesday.toISOString()); PastWednesday.setDate(PastTuesday.getDate() - 6); console.log('Start Date is',PastWednesday.toISOString()); return[PastWednesday,PastTuesday]; } Output obtained is: End date is 2022-03-27T19:25:35.726Z //here month is set to March Start Date is 2022-03-21T19:25:35.726Z Expected Result is End date is 2022-04-26T19:25:35.726Z // month is supposed to be April Start Date is 2022-04-20T19:25:35.726Z¿Cómo puedo cambiar el código para obtener el resultado esperado?
deberías hacer algo como
function getLastWeek(date) { var today = new Date(date); var lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7); return lastWeek; } // Your DATE date = '2022-05-01' // var lastWeek = getLastWeek(date); var lastWeekMonth = lastWeek.getMonth() + 1; var lastWeekDay = lastWeek.getDate(); var lastWeekYear = lastWeek.getFullYear(); var lastWeekDisplay = lastWeekMonth + "/" + lastWeekDay + "/" + lastWeekYear; console.log(lastWeekDisplay);En tu código:
var now = new Date('2022-05-01'); //May 1st 2022Las fechas en el formato AAAA-MM-DD se analizan como UTC, por lo que lo anterior creará un objeto de fecha que representa 2022-05-01T00:00:00Z.
var day = now.getDay();Esto devolverá el número de día local. Para los usuarios con un desplazamiento cero o positivo, devolverá 0 (domingo), pero para los usuarios con un desplazamiento negativo, devolverá 6 (sábado) porque su fecha local sigue siendo el día anterior.
var diff = (day <= 2) ? (7 - 2 + day ) : (day - 2);El día dado es 0 (para mí), lo anterior establece la diferencia en 5.
var PastTuesday = new Date();Esto crea una fecha para "ahora", que para mí es el 17 de abril.
var PastWednesday = new Date(PastTuesday.setDate(now.getDate() - diff));En lo anterior, now.getDate devuelve 1, y 1 - 5 es -4, por lo que establece la fecha para PastTuesday en -4. Ahora PastTuesday es en abril, por lo que se establece en 4 días antes del comienzo de abril, es decir, el 27 de marzo.
Tenga en cuenta que esto ajusta PastTuesday y crea una copia para PastWednesday al mismo tiempo.
console.log('End date is', PastTuesday.toISOString());Muestra la fecha y hora UTC equivalentes, con la hora que representa la hora en que se ejecutó el código.
PastWednesday.setDate(PastTuesday.getDate() - 6);Establece PastWednesday en 6 días antes de PastTuesday .
De todos modos, lo que se requiere es hacer todo como UTC o local, no mezcle los dos.
Siguiendo el código lo más cerca posible del original y asumiendo que una marca de tiempo en formato AAAA-MM-DD se analiza para la función, considere lo siguiente, que hace todo como local:
// Parse timestamp in YYYY-MM-DD format as local function parseISOLocal(s = new Date().toLocaleDateString('en-CA')) { let [y, m, d] = s.split(/\D/); return new Date(y, m-1, d); } // Get week Wed to Tue prior to passed date function getStartAndEndDates (date) { // Parse timestamp as local var pastTuesday = parseISOLocal(date); // Adjust pastTuesday to previous Tuesday var day = pastTuesday.getDay(); var diff = (day <= 2) ? (7 - 2 + day ) : (day - 2); var pastWednesday = new Date(pastTuesday.setDate(pastTuesday.getDate() - diff)); console.log('End date is', pastTuesday.toDateString()); // Adjust pastWednesday to previous Wednesday pastWednesday.setDate(pastTuesday.getDate() - 6); console.log('Start Date is',pastWednesday.toDateString()); return [pastWednesday, pastTuesday]; } // Sunday 1 May 2022 console.log(getStartAndEndDates('2022-05-01').map(d => d.toDateString())); // Current date console.log(getStartAndEndDates().map(d => d.toDateString()));