Calculo entre datas apresentando erro.

Delphi

24/10/2022

Bom dia!

Sou novo na área de programação e estou me atrapalhando no meu primeiro projeto.
Gostaria de ajuda para chegar onde preciso.
Trata-se de uma calculadora de vencimentos para alimentos.
O problema é que dependendo do momento que eu insiro a data do vencimento, ele me informa que a data é menor que a fabricada mesmo que seja do mês ou ano posterior.

ex: fabricada: 10/10/2022
vencimento: 11/10/2022
O resultado dá o esperado, mas se eu quiser "trocar" a data de 11/10/2022 para 09/11/22 no vencimento, ele dá o erro dizendo que a data de vencimento é menor que a de fabricação.

fiz assim:

Procedure do bt_calcular
var fabricado, vencimento : tdatetime
var shelf : integer;

begin
vencimento:= strtodate (d_vencimento.text);
fabricado := strtodate (d_fabricado.text);

txt_shelf.text := inttostr (daysbetween(vencimento,fabricado)+1);

shelf:= strtoint (txt_shelf.text);

end;

Agradeço desde
Lpdias

Lpdias

Curtidas 0

Respostas

Raimundo Pereira

Raimundo Pereira

24/10/2022

procedure TForm1.bt_calcularClick(Sender: TObject);
var fabricado, vencimento : tdatetime;
var shelf : integer;

begin
vencimento:= strtodate (d_vencimento.text);
fabricado := strtodate (d_fabricado.text);

//Aqui ele pega a diferença de dias entre duas datas
//Observe que vem na ordem Maior data e depois menor data e acrescenta +1

// 11/10/2022 Inicialmente é a sua data de vencimento Maior que a data de Fabricação 10/10
// Quando você altera 11/10/2022 *Vencimento * para 09/11/22 O vencimento fica menor que a Fabricação que atualmente é *10/10/2022*


// Verifica se Vencimento é Maior que o Fabricado
if vencimento >Fabricado then
txt_shelf.text := inttostr (daysbetween(vencimento,fabricado)+1); //Neste caso vencimento é Maior, Coloca a Maior Data na Ordem


// Verifica se Vencimento é Menor que o Fabricado
if vencimento <Fabricado then
txt_shelf.text := inttostr (daysbetween(fabricado,vencimento)+1); //Neste caso Fabricad é Maior, Coloca a Maior Data na Ordem


// Verifica se são iguais
if vencimento =Fabricado then
begin
txt_shelf.text := inttostr (daysbetween(fabricado,vencimento)+1); //Neste caso retorna 1

end;

shelf:= strtoint (txt_shelf.text);

end;
GOSTEI 0
Lpdias

Lpdias

24/10/2022

Prezado Raimundo,

Te agradeço pela ajuda e peço desculpas pela demora em responder.
Mas infelizmente ainda não consegui chegar onde preciso, pois a questão de dias me parece que não considera o mês e ano também.
Eu adicionei uma condicional no onChange do fabricado para não permitir que a data digitada seja maior que a data de vencimento.
O resultado é que não consigo nem digitar o dia, pois se o valor for menor que o dia do vencimento já barra. Ele nem considera o mês.



procedure TForm1.bt_calcularClick(Sender: TObject);
var fabricado, vencimento : tdatetime;
var shelf : integer;

begin
vencimento:= strtodate (d_vencimento.text);
fabricado := strtodate (d_fabricado.text);

//Aqui ele pega a diferença de dias entre duas datas
//Observe que vem na ordem Maior data e depois menor data e acrescenta +1

// 11/10/2022 Inicialmente é a sua data de vencimento Maior que a data de Fabricação 10/10
// Quando você altera 11/10/2022 *Vencimento * para 09/11/22 O vencimento fica menor que a Fabricação que atualmente é *10/10/2022*


// Verifica se Vencimento é Maior que o Fabricado
if vencimento >Fabricado then
txt_shelf.text := inttostr (daysbetween(vencimento,fabricado)+1); //Neste caso vencimento é Maior, Coloca a Maior Data na Ordem


// Verifica se Vencimento é Menor que o Fabricado
if vencimento <Fabricado then
txt_shelf.text := inttostr (daysbetween(fabricado,vencimento)+1); //Neste caso Fabricad é Maior, Coloca a Maior Data na Ordem


// Verifica se são iguais
if vencimento =Fabricado then
begin
txt_shelf.text := inttostr (daysbetween(fabricado,vencimento)+1); //Neste caso retorna 1

end;

shelf:= strtoint (txt_shelf.text);

end;
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

24/10/2022

Prezado Raimundo,

Te agradeço pela ajuda e peço desculpas pela demora em responder.
Mas infelizmente ainda não consegui chegar onde preciso, pois a questão de dias me parece que não considera o mês e ano também.
Eu adicionei uma condicional no onChange do fabricado para não permitir que a data digitada seja maior que a data de vencimento.
O resultado é que não consigo nem digitar o dia, pois se o valor for menor que o dia do vencimento já barra. Ele nem considera o mês.



procedure TForm1.bt_calcularClick(Sender: TObject);
var fabricado, vencimento : tdatetime;
var shelf : integer;

begin
vencimento:= strtodate (d_vencimento.text);
fabricado := strtodate (d_fabricado.text);

//Aqui ele pega a diferença de dias entre duas datas
//Observe que vem na ordem Maior data e depois menor data e acrescenta +1

// 11/10/2022 Inicialmente é a sua data de vencimento Maior que a data de Fabricação 10/10
// Quando você altera 11/10/2022 *Vencimento * para 09/11/22 O vencimento fica menor que a Fabricação que atualmente é *10/10/2022*


// Verifica se Vencimento é Maior que o Fabricado
if vencimento >Fabricado then
txt_shelf.text := inttostr (daysbetween(vencimento,fabricado)+1); //Neste caso vencimento é Maior, Coloca a Maior Data na Ordem


// Verifica se Vencimento é Menor que o Fabricado
if vencimento <Fabricado then
txt_shelf.text := inttostr (daysbetween(fabricado,vencimento)+1); //Neste caso Fabricad é Maior, Coloca a Maior Data na Ordem


// Verifica se são iguais
if vencimento =Fabricado then
begin
txt_shelf.text := inttostr (daysbetween(fabricado,vencimento)+1); //Neste caso retorna 1

end;

shelf:= strtoint (txt_shelf.text);

end;


Chama lá no discord que te ajudo e depois postamos o resultado aqui para ajudar os demais colegas em futuras duvidas
Raimundo Pereira - ADS Estácio#6686
GOSTEI 0
Lpdias

Lpdias

24/10/2022

Legal... acabei de instalar e te enviei um pedido de amizade.

Prezado Raimundo,

Te agradeço pela ajuda e peço desculpas pela demora em responder.
Mas infelizmente ainda não consegui chegar onde preciso, pois a questão de dias me parece que não considera o mês e ano também.
Eu adicionei uma condicional no onChange do fabricado para não permitir que a data digitada seja maior que a data de vencimento.
O resultado é que não consigo nem digitar o dia, pois se o valor for menor que o dia do vencimento já barra. Ele nem considera o mês.



procedure TForm1.bt_calcularClick(Sender: TObject);
var fabricado, vencimento : tdatetime;
var shelf : integer;

begin
vencimento:= strtodate (d_vencimento.text);
fabricado := strtodate (d_fabricado.text);

//Aqui ele pega a diferença de dias entre duas datas
//Observe que vem na ordem Maior data e depois menor data e acrescenta +1

// 11/10/2022 Inicialmente é a sua data de vencimento Maior que a data de Fabricação 10/10
// Quando você altera 11/10/2022 *Vencimento * para 09/11/22 O vencimento fica menor que a Fabricação que atualmente é *10/10/2022*


// Verifica se Vencimento é Maior que o Fabricado
if vencimento >Fabricado then
txt_shelf.text := inttostr (daysbetween(vencimento,fabricado)+1); //Neste caso vencimento é Maior, Coloca a Maior Data na Ordem


// Verifica se Vencimento é Menor que o Fabricado
if vencimento <Fabricado then
txt_shelf.text := inttostr (daysbetween(fabricado,vencimento)+1); //Neste caso Fabricad é Maior, Coloca a Maior Data na Ordem


// Verifica se são iguais
if vencimento =Fabricado then
begin
txt_shelf.text := inttostr (daysbetween(fabricado,vencimento)+1); //Neste caso retorna 1

end;

shelf:= strtoint (txt_shelf.text);

end;


Chama lá no discord que te ajudo e depois postamos o resultado aqui para ajudar os demais colegas em futuras duvidas
Raimundo Pereira - ADS Estácio#6686
GOSTEI 0
POSTAR