Ir para conteúdo

POWERED BY:

Arquivado

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

Jefferson NF

[Resolvido] calculo de dias

Recommended Posts

boa tarde pessoal

estou com um problema aki e nao sei como resolver

eu tenho q gerar um valor pro cliente proporcional,por exemplo o cliente aderiu no dia 20 de janeiro e escolheu o vencimento todo dia 10,entao ele nao vai pagar a mensalidade normal no primeiro dia 10,kero saber como posso fazer pra calcular o dia q ele aderiu ateh o dia do vencimento,essa qtd d dias eu multiplico por um valor q ja tenho

eh meio confuso msm,eu sei q tem q envolver função pra verificar o numero d dias d cada mes,isso eu tenho,soh nao sei msm como calcular a qtd d dias desde o dia q ele aderiu ateh o dia do vencimento

se alguem puder me ajudar,agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use timestamps para calcular a diferença em segundos. Depois divida o resultado por 86400 (24 horas em segundos).

 

Mais informações:

http://www.php.net/manual/pt_BR/ref.datetime.php

 

 

Se as datas estiverem no banco de dados, pode usar funções de data e hora do seu banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce poderia me dar algum exmplo com a função timestramp?

as datas estao no meu banco sim,mas o problema eh q sei menos d BD do q d php hahaah,outro problema eh q a data de ativação esta no bano assim : 0000-00-00 e o vencimento nao esta no formato data,esta soh 10 , 20 ou 30,ae nao sei se usar o banco seria uma boa saida

nao sei como fazer a comparação,se a data ativação esta no formato data mas o vencimento nao

nao sei como fazer isso tbm em php

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu consegui isso aki,mas ta estranho,eu dou um echo e da valor negativo

$diasproporcionais = strtotime($datavencimento) - strtotime($row["dataativacao"]);

$diasproporcionais = floor($diasproporcionais/60/60/24);

 

if ($diasproporcionais < 25)

{

$valor = $valor / 30 * $diasproporcionais;

}

tem alguma coisa nesse exmplo aki q eu possa mudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual é o valor de $datavencimento?

 

Você pode gerar a data de vencimento assim:

 

$dia_ativacao = 3;
$mes_ativacao = 1;
$ano_ativacao = 2008;

$vencimento = mktime(0, 0, 0, ($mes_ativacao + 1), $dia_do_vencimento, $ano_ativacao);

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom dia

brigado pela ajuda beraldo,eh eu tava pensando aki e vou ter q fazer por parte,pq o dia do documento e o dia da ativação eu ja tenho,e ja esta no formato data certo,o problema eh q nao tenho a data completa do vencimento,soh tenho o dia,falta mes e ano

entao para conseguir essa data d vencimento eu tenho q pegar o dia da ativação ou o dia q o documento fio gerado e ver o mes e colcoar + 1

soh uma duvida esse exemplo q você me deu funciona qnd o mes vira,por exemplo qnd chegar dia 31 d janeiro vai virar 1 de fevereiro?nao conheço essa função mktime

 

eu fiz o teste com o q você me passou aki assim :

$dia = date(d);
$mes = date(m);
$ano = date(Y);
$vencimento = mktime(0, 0, 0, ($mes + 1), $dia, $ano);
qnd dei um echo vencimento saiu isso: 1203822000

estranho

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente o que o Paulo falou. É o que eu tinha sugerido primeiro: trabalhar com timestamps. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Quanto à data de vencimento, veja esta parte do script que postei:

 

($mes_ativacao + 1)

O mês de vencimento é gerado a partir do mês de ativação, como você está querendo fazer.

 

 

Quanto à dúvida do dia 31, o PHP não gera dia 32, nem mês 13. As datas são corretamente geradas, com base no número total de dias do mês.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eh debian,eu nem tinha me ligado nisso,eh pq eu tava usando a função date soh na hora de dar o echo pra testar,depois eskeci de atribuir esse valor a alguma variavel

ficou assim:

$diavenc = $row["vencimento"];
$timestamp = mktime(0, 0, 0, $mes, $diavenc, $ano);
$datavenc = strtotime("+1 month", $timestamp);
$datavenc = date("d/m/Y", $datavenc);

bom o primeiro passo eu ja dei,ja tenho a data de ativação,a data de criação do boleto e agora ja tenho tbm a data de vencimento,agora soh falta calcular qnts dias tem desde a data de ativação ateh a data de vencimento

alguma ajuda?

vou dar uma olhada por aki,qlq coisa posto

Compartilhar este post


Link para o post
Compartilhar em outros sites

como eu posso fazer essa subtração com datas?a q fiz deu negativo,eu tenho q subtrair o vencimento pela ativação ou o contrario?as minhas data estao assim 00/00/0000,posso subtrair assim msm?

 

minhas datas:

$arr = explode("/",$dataativ);
$diaa = $arr[0];
$mesa = $arr[1];
$anoa = $arr[2];

$diavenc = $row["vencimento"];
$timestamp = mktime(0, 0, 0, $mes, $diavenc, $ano);
$datavenc = strtotime("+1 month", $timestamp);
$datavenc = date("d/m/Y", $datavenc);

$arr2 = explode("/",$datavenc);
$diavenc2 = $arr2[0];
$mesvenc = $arr2[1];
$anovenc = $arr2[2];

onde e como posso subtrai-las?

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom eu fiz assim:

$timestamp_vencimento = mktime(0, 0, 0, $mesvenc, $diavenc2, $anovenc);
$timestamp_ativacao = mktime(0, 0, 0, $mesa, $diaa, $anoa);

echo (($timestamp_vencimento-$timestamp_ativacao)/84600);
e o resultado foi esse: 59.2340425532 a data da ativação

esse resultado foi obtido atraves da data de ativação em 14/12/2007 e o vencimento com data 10/02/2008,pelas minhas contas daria 58 dias,mas enfim nao sei se o codigo ae em cima esta correto

acho q deve esta certo,soh mudar alguns detalhes como formatar as casas decimais e tal,eh soh isso msm?ou tem alguma coisa errada?alguem pode me ajduar a formtar esse resultado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

por exemplo

data ativaçao = 08/01/2008

data vencimento = 10/02/2008

a qtd d dias q o php me da eh essa: 33.7021276596

soh q nao sei se coloco round ou floor,um da 33 e o outro da 34 hahhhaaa nao sei kal coloco

outro problema d formatação q tenho eh q essa qtd d dias eu tenho q multiplicar pelo valor da mensalidade dividido pelo numero d dias do mes,como posso formatar corretamente a qtd d dias e como posso formtar essa divisao da mensalidade pelos dais?

essa divisao me retorna um numero assim:2.25806451613 ,e no caso teria q usar o valor 2,26 e nao esse

alguma dica?ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

hahhhaaa nao sei kal coloco

Nem eu. :)

 

outro problema d formatação q tenho eh q essa qtd d dias eu tenho q multiplicar pelo valor da mensalidade dividido pelo numero d dias do mes,como posso formatar corretamente a qtd d dias e como posso formtar essa divisao da mensalidade pelos dais?

essa divisao me retorna um numero assim:2.25806451613 ,e no caso teria q usar o valor 2,26 e nao esse

alguma dica?ajuda?

round()

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em ambos os casos (59 e 33), floor() retornaria o número correto.

Esses valores decimais devem estar sendo gerados pela diferença de horários entre as datas. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao o melhor a ser feito eh assim:

$qtddias = floor(($timestamp_vencimento-$timestamp_ativacao)/84600);
??

e a respeito da divisao da qtd d dias pelo valor da mensalidade,como posso mudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao o melhor a ser feito eh assim:

$qtddias = floor(($timestamp_vencimento-$timestamp_ativacao)/84600);
??

exatamente. :)

 

 

e a respeito da divisao da qtd d dias pelo valor da mensalidade,como posso mudar?

Use a dica do Paulo André: round(). Essa função usa as regras matemáticas de arredondamento. number_format() tamém faz isso, mas ela permite, também, definir o separados de milhar e o de casas decimais.

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.