Jump to content
Fórum Script Brasil
  • 0

Cálculo De Valores


BrenoLourenço
 Share

Question

Salve galera!

Estou tendo um probleminha cruel... vê se alguém pode me ajudar nessa!

Estou querendo realizar cálculo em cima do dia corrente do ano ($dia = gmdate("z"); ). É o seguinte, vamos partir do princípio que você pegue comigo um material no dia 6 de janeiro e me devolva dia 10 de janeiro, quando eu fizer o cálculo, irá me retornar que você ficou 4 dias com o material. Até aí tudo bem. Se você pegar em fevereiro e devolver em agosto, sem problemas também.

Meu problema todo está quando o ano vira, por exemplo, caso você pegue em novembro de 2004 e devolva em janeiro de 2005, tudo bem, fiz uma função que calculou essa diferença, o problema todo é, se você pegar em agosto de 2004 e devolver em novembro de 2005, aí não estou vendo solução para isso, ou seja, pegar em um mês de um ano, e devolver em um mês maior do ano seguinte.

Pensei em uma maneira, que seria de concatenar o ano + mês + dia corrente, mas tem um problema aí. Por exemplo:

Janeiro 2005 tem que ser maior do que Agosto de 2004 para realizar a subtração, porém fazendo da maneira que falei, não é bem assim.

Jan/05 -> 2005+01+31

Ago/04 -> 2004+08+220

Mas para isso funcionar, duas coisas teriam que ser corrigidas:

1) ao pegar mês de janeiro, ao invés de 31, teria que ser 031, tem como?

2) tem como no resultado de uma subtração, pegar somente os três últimos números? Tipo, como se tivesse um resultado assim: 200101030, porém queria apenas o 030.

Pô, quem souber como resolver esses meus probleminhas ou então souber de uma maneira mais fácil, muito grato por isso!

Segue a função do cálculo:

    function calcula_emprestimo($diacorr_emp,$diacorr_atual)

    {

        if($diacorr_emp <= $diacorr_atual)

        {

          $conta1 = $diacorr_atual - $diacorr_emp;

          return($conta1);

        }

        else

        {

          $aux = 365 - $diacorr_emp;

          $conta2 = $aux + $diacorr_atual;

          return($conta2);

        }

    }

Abraço!

Link to comment
Share on other sites

18 answers to this question

Recommended Posts

  • 0

ae fera, tah ai o codigo prontinho p/ vc

<?

// AQUI VAI A DATA DE RETIRADA... CASO SEJA VARIAVEL APENAS TROQUE A DATA PELA VARIAVEL

$data_ret = explode("/", "20/08/2004");

$data_retirada = mktime(0,0,0, $data_ret[1], $data_ret[0], $data_ret[2]);

//AQUI É A DATA ATUAL

$data_ret = explode("/", date("d/m/Y"));

$data_entrega = mktime(0,0,0, $data_ret[1], $data_ret[0], $data_ret[2]);

//AQUI ELE APRESENTA EM DIAS O TEMPO QUE FICOU FORA

$tempo_permanencia = ($data_entrega - $data_retirada);

echo date("d", $tempo_permanencia);

?>

Link to comment
Share on other sites

  • 0

Pô Luiz, valeu aí pela ajuda.

Mas deu um erro, e ali você está tratando pela data, eu estava tratando pelo dia corrente do ano. Tudo bem, poderia mudar meu script, mas você está fazendo o cálculo pelo mês, e o problema é quando muda o ano, aí continua no mesmo problema que eu estava, entendeste?

Então continuo com meu problema, caso alguém saiba como me ajudar, agradeço desde já!

Valeu!

Link to comment
Share on other sites

  • 0

É, tá certo, consegui tirar o erro que estava dando.

Mas está caindo no mesmo problema que o meu Luiz.

Tipo, está funcionando corretamente, como voce disse:

"se a primeira for 10/10/2004 e a segunda 10/10/2005 ele vai retornar 365 dias"

Até aí tudo bem, mas se:

"se a primeira for 10/10/2004 e a segunda 15/10/2005 ele vai retornar 05 dias ao invés de 365 + 5"

entendeu? continuou com meu mesmo problema.

Link to comment
Share on other sites

  • 0

Valeu Luiz!

Vê se consegue essa pra mim, porque do que já bati com a cabeça tentando resolver isso e não consegui... não tá no gibi!

PS: estou saindo do trabalho agora, e só vou poder visualizar dinovo esse post amanhã, mas gostaria de agradecer desde já pela atenção e pela ajuda aí! amanhã eu vejo se você ou alguma outra pessoa conseguiu matar essa pane pra mim!

Valeu aê pela ajuda!

Abração!

Link to comment
Share on other sites

  • 0

Ve se isso ajuda:

esse script foi o Illidan que fez wink.gif

<?

function dif_data( $data1, $data2 )

{

if ( strcmp( substr( $data1, 2, 1 ), "/" ) == 0 )

{

     $data1 = substr($data1,6,4).substr($data1,2,4).substr($data1,0,2);

     $data2 = substr($data2,6,4).substr($data2,2,4).substr($data2,0,2);

}

$DataInicial = getdate(strtotime($data1));

$DataFinal = getdate(strtotime($data2));

$Dif = ($DataFinal[0] - $DataInicial[0]) / 86400;

return( $Dif );

}

$data1 = "10/10/2004";

$data2 = "15/10/2005";

$diferenca = dif_data($data1, $data2);

$diferenca = ceil($diferenca);

echo "$diferenca dia(s)";

?>

Link to comment
Share on other sites

  • 0

Pô fabyo, valeu aí pelo script que você me indicou! Ele faz exatamente o que eu preciso, só que ele me gerou um erro, não sei se tem como corrigir.

É o seguinte, essas datas, $data1 e $data2 eu estou fazendo da seguinte forma:

$data1 - busco da base de dados

$data2 - pego localmente

Sendo que, quando estou gravando a data na base de dados, estou gravando separadamente, (dia, mes e ano). E quando ele grava o mês, por exemplo agosto, ao invés dele gravar zero oito (08), ele grava apenas o 8. Então quando eu faço a busca, concateno a data e jogo na variável $data1, a função me gera um erro por causa desse zero que está faltando.

$data1 = 27/8/2004 ele gera erro, porque teria que ter o zero.

E agora, o que eu faço? tem como adicionar esse zero no banco de dados ou teria que alterar meu banco de dados para gravar a data completa? (isso vai me dar uma trabalheira do cão, só faria isso em último caso!!!)

Ou teria alguma outra solução? alterar o banco de dados... putz... essa não, espero que tenha como verificar se o mês tem apenas 1 dígito e acrescentar o zero antes... sei lá...

Estou aberto a sugestões...

Desde já obrigado pelas colaborações!

Abraço

Link to comment
Share on other sites

  • 0

cara o melhor é você alterar sua base de dados para formato DATE...

Tipo, senão você sempre que for trabalhar com data vai ter que ficar "improvisando", concatenando.. sempre vai se locura, porque com isso o codigo fica zoneado, fica mais lerdo, porque existem funções para datas e você não vai poder usar....

O melhor é alterar tudo....

cria ai uma nova coluna, e faiz uma funçao que ele concatena a data e grava na nova coluna.. em 5 min. você já modifica tudo

Link to comment
Share on other sites

  • 0

Poxa, se perdesse apenas 5 minutos já o teria feito, mas o problema não está na base de dados, e sim nos arquivos já feitos. Estou montando um programa, e estou em fase terminal, e agora alterar todos os arquivos só por causa disso... putz, ninguém merece! Cadastro é apenas um, o problema são as consultas que são bastante e estão todas configuradas dessa maneira.

PS: fiz separado assim, porque quando montei tudo, ainda não tinha muita noção das coisas, hoje vejo que não é a melhor maneira... meu problema todo era dividir a data, separar... mas agora sei que não é tão complicado assim.

Mas tem problema não, hoje é sexta e só vou pegar nesse trabalho dinovo na segunda feira, então até lá eu vejo se recebo mais alguma outra mensagem de ajuda, senão vou tomando coragem para na segunda feira alterar tudo!

Só mais uma pergunta: se colocar na base de dados do tipo DATE, ele quando recebe mês agosto por exemplo, ele insere o zero né? Melhor, eu mesmo vou fazer o teste aqui...

Valeu aí aos que me ajudaram!

Abraço!

Link to comment
Share on other sites

  • 0

Cara você falou de busca então mais um motivo pra usar o campo date

ele é o mais indicado pra isso e pra você fazer busca etc... tem funções proprias pra datas no mysql

mas vamos la vou tentar te ajudar já que você não pode auterar

1 pra você acrescentar 1 zero no mes e ficar certo você faz assim:

$mes = sprintf("%02d", $mes);

dai se o mes tiver exemplo 8 ele vai deixar 08

entendeu?

estou gravando separadamente, (dia, mes e ano).

Resposta:

se ta a data separada você monta ela exemplo:

$data = "$dia/$mes/$ano";

entendeu você pega os valores do dia, mes e ano e monta na variavel data

Link to comment
Share on other sites

  • 0

fabyo, valeu aí pela ajuda cara! Demorei um pouco a responder mas você não me quebrou nem um galho, foi logo uma árvore! Matou minha pane.

Valeu mesmo! biggrin.gif

PS: entendi o funcionamento sim, agora só uma dúvida, você concatenou as variáveis assim:

$data = "$dia/$mes/$ano";

Eu utilizo ponto assim $data = "$dia.$mes.$ano";

Tem alguma diferença? ou com a barra seria melhor?

Abraço!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.7k
    • Total Posts
      648.4k
×
×
  • Create New...