Calculo entre datas apresentando erro.
24/10/2022
0
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
Posts
24/10/2022
Raimundo Pereira
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;
09/11/2022
Lpdias
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.
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;
09/11/2022
Raimundo Pereira
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.
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
09/11/2022
Lpdias
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.
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
Clique aqui para fazer login e interagir na Comunidade :)