Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MatheusSilva

validade produto

Recommended Posts

ola, eu tenho em um banco de dados a data de fabricação de um produto, dia sei la, 15/09/2011, e eu falo que tem 7 dias de validade, como eu faço isso?? desse jeito?

 

		$validadeTotal1 = date('d') + $validade;
		$validadeTotal = $validadeTotal1.'/'.date('m/Y');

 

se estiver certo, como eu faço no caso se a validade for de 30 dias?, pq dai 15+30 daria 45, e nao existe dia 45.

 

obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Supondo que o produto foi fabricado em 15/09/2011 e tenha validade de 30 dias, para pegar a data do vencimento fica assim:

 

$fabricacao = mktime(0, 0, 0, 9, 15, 2011);
$vencimento = $fabricacao + (30 * 86400);
echo 'Data de fabricação: ' . date('d/m/Y', $fabricacao) . '<br />' . PHP_EOL;
echo 'Vencimento: ' . date('d/m/Y', $vencimento) . '<br />' . PHP_EOL;

 

Saída:

 

Data de fabricação: 15/09/2011

Vencimento: 15/10/2011

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me tira uma duvida, esse mktime pega a data atual?

Não, ele retorna o timestamp da data que foi passada, no caso 15/09/2011.

 

 

e outra, pra que esse 30 (data digita pelo usuario do sistema) X 86400?

Porque o timestamp é calculado em segundos, e 86400 segundos são 1 dia e 2592000 segundos (30 x 86400) são 30 dias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola, tentei fazer uns ajustes aki mas nao deu, com o mktime ele pegava a data digitada no mesmo, entao troquei pra

date('d/m/Y');

 

entao tive que trocar algumas coisas, e ficou assim.

 

$fabricacao = date('d/m/Y');//mktime(0, 0, 0, 9, 15, 2011);
$vencimento = $fabricacao + ($validade * 86400);

echo 'Data de fabricação: ' . date('d/m/Y') . '<br />' . PHP_EOL;
echo 'Vencimento: '. $vencimento . '<br />' . PHP_EOL;

OBS: $validade é os dias digitados pelo cliente, por exemplo 30 dias.

 

 

a data de fabricação ele printa certin

 

Data de fabricação: 20/09/2011

 

mas a de validade nao.

 

Vencimento: 2592020

 

 

porque esta acontecendo isso??

 

obrigado mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use a classe DateTime

 

<?php

// data atual
$data = new DateTime; 

// acrescenta 30 dias
$data->add( new DateInterval( 'P30D' ) );

// 20/10/2011 19:46:23
echo $data->format( 'd/m/Y H:i:s' ); 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matheus,

 

Eu te passei o código pronto no post #4. Tudo o que você tem que fazer é adaptar pra receber a data e quantidade de dias para vencimento do seu sistema.

 

Você está fazendo confusão aí, a função date não retorna um timestamp como a função mktime, então é lógico que não vai funcionar como o esperado.

 

Antes de sair inventando coisas aí, pare um pouco e olhe o manual pra entender exatamente o que cada função faz. Trabalhar com datas é algo básico que qualquer programador deve saber, e ao mesmo tempo é relativamente simples.

 

Aí vai o link da documentação das funções:

 

Função date

Função mktime

 

 

A solução do Carlos Coelho também é boa, utilizando a nova classe DateTime (disponível a partir do PHP 5.2). Mas como eu já te passei a solução pronta e, presumo que o seu sistema não é orientado a objetos, acho que não vem ao caso utilizá-la.

Compartilhar este post


Link para o post
Compartilhar em outros sites

leozitho,

a questao de datas, preciso ter vergonha na cara e ir procurar,

mas conversando com meu pai (que tambem sabe pouco de php) ele disse que estava fazendo algo disso esses dias, e peguei o codigo que ele fez.

 

list($dia, $mes, $ano) = explode('/',date('d/m/Y'));
   	$vencimento = strftime('%d/%m/%Y', mktime(0, 0, 0, $mes, $dia + $validade,$ano));

 

e funcionou...

mas obrigado por puxar minha orelha em relaçao a data, realmente, é algo que preciso saber....

 

obrigado a todos, entao fica ai a resoluçao deste problema, mesmo que nao tenha utilizado a soluçao proposta por você eu agradeço por ter dado uma força.

 

obrigado mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse seu código está errado:

 

$vencimento = strftime('%d/%m/%Y', mktime(0, 0, 0, $mes, $dia + $validade,$ano));

 

Você deve passar uma data válida para a função mktime, e você está somando o dia passado com a quantidade de dias para vencimento do produto ($dia + $validade), seguindo essa lógica, se o dia passado for 30 e a validade 30 dias, resultará no dia 60, que não existe. :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo que entendi é isso =X

 

a roda ja foi inventada faz tempo precisa faze ela de novo não kkk...

 

echo $data_DB = '2011-09-20';
$date = date_create($data_DB);
date_modify($date, '+7 day');
echo 'Vencimento: ', date_format($date, 'd/m/Y');

//saida 2011-09-20 Vencimento: 27/09/2011

Compartilhar este post


Link para o post
Compartilhar em outros sites

a roda ja foi inventada faz tempo precisa faze ela de novo não kkk...

 

Não entendi, desde quando usar a função mktime, que é nativa do PHP e amplamente utilizada, é reinventar a roda? Aliás, ela já existe bem antes de existir as funções que você usou, que só estão disponíveis a partir da versão 5.2.0 do PHP.

 

Não sei se você leu o tópico todo, mas eu já postei o código pronto e funcionando lá no post #4. Você só usou funções diferentes pra fazer a mesma coisa. ;)

 

O autor do tópico só está tendo dificuldades para adaptar ao sistema dele, pois parece desconhecer como usar de maneira correta as funções.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O autor do tópico só está tendo dificuldades para adaptar ao sistema dele, pois parece desconhecer como usar de maneira correta as funções.

Por isso mesmo resolvi colocar mais outra alternativa no topico resolvido =X

 

Mais ele ja resolvel da forma dele que você disse estár errada (provavelmente está)..

 

qndo disse 'inventar a roda' não foi pra atacar sua função que funciona perfeitamente!!

 

mais sim a do autor do topico que me parece um tanto confusa !!!!

 

essa:

list($dia, $mes, $ano) = explode('/',date('d/m/Y'));
       $vencimento = strftime('%d/%m/%Y', mktime(0, 0, 0, $mes, $dia + $validade,$ano));

 

da forma que você colocou ou da forma que fiz são bem mais praticas

se resultado final seja mesmo esse que o autor esteja procurando =)

:joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse seu código está errado:

 

$vencimento = strftime('%d/%m/%Y', mktime(0, 0, 0, $mes, $dia + $validade,$ano));

 

Você deve passar uma data válida para a função mktime, e você está somando o dia passado com a quantidade de dias para vencimento do produto ($dia + $validade), seguindo essa lógica, se o dia passado for 30 e a validade 30 dias, resultará no dia 60, que não existe. :P

 

entao, se esta errada ou n, nao sei, só sei que incrivelmente funcionou...se você digita 30 por exeplo com a data de hj:

 

data atual: 21/09/2011

 

data vencimento: 21/10/2011

 

se você digita 15

vencimento: 06/10/2011

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.