Capturar o inicio e o fim do mes anterior

2 respostas
javascript
V

Olá pessoal, estou com dificuldades para programar uma logica para um relatório, pois a data tem que ser dinâmica. No caso ela tem que capturar duas datas, a data do inicio do mês passado e fim do mês passado. Essas duas strings eu vou usar em uma query dentro da clausula Between.

O que estou usando via sql não esta funcionando por isso pensei em pegar via javascript

AND TRUNC(data_exame) BETWEEN TO_DATE('01'|| TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE, -1)), 'MM/YYYY')) AND LAST_DAY(ADD_MONTHS(SYSDATE, -1))

O resultado do between deveria ser 01/12/2021 e 31/12/2021. Más não esta funcionando.

2 Respostas

R

Tente isso:

const date = new Date();
const currMonth = date.getMonth();
const previousMonth = currMonth - 1;

const firstDay = new Date(date.getFullYear(), previousMonth, 1);
const lastDay = new Date(date.getFullYear(), previousMonth + 1, 0);

console.log(firstDay);
console.log(lastDay);
H

Mas as datas estão certas, o problema é o horário. Na data final ele gera 31 de dezembro, mas no horário atual (que ele pega do sysdate).

Como está buscando entre duas datas com BETWEEN, o ideal seria fazer a data inicial com horário meia-noite e a data final com horário 23:59:59.

Na data inicial já está correto (o horário é meia-noite), mas tem outro jeito mais simples de fazer (aliás, que banco é esse? é Oracle?):

TRUNC(data_exame) BETWEEN
    TRUNC(ADD_MONTHS(sysdate, -1), 'MM') AND
    TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE, -1)), 'DD') + 1 - INTERVAL '1' SECOND

Assim, a busca é feita entre 1 de dezembro à meia-noite e 31 de dezembro às 23:59:59.

Se ainda não funcionar, pode ser algum outro problema na query (e nesse caso, seria bom você mostrar alguns dados de exemplo e qual deveria ser o resultado, senão a gente não consegue testar e nem adivinhar qual é o problema).

De qualquer forma, não precisa gerar no JavaScript nem nada disso, dá pra se virar só com as funções do próprio banco.

Criado 18 de janeiro de 2022
Ultima resposta 18 de jan. de 2022
Respostas 2
Participantes 3