Ir para conteúdo

Arquivado

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

rafaeldupalio

calcular diferença de dias. e calcular valor a cobrar no mes

Recommended Posts

Galera até hoje não consegui fazer preciso calcular a diferença de dias dentro de um mes.

tenho o sistema que faz o controle de equipamentos alugados no mes preciso fazer duas contas uma quantos dias ficou em uso e com base nesse numero multiplicar para saber o valor para cobrar no final do mes.

Alguem pode me ajudar??

 

#1 data_aluguel 01-01-2015

data_devolucao 31-01-2015

dias_usados:31

 

#2 dias_usados x 2.83333

cobranca:87.833

 

Algo desse tipo

 

 

Alguem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primero voce compara se a data inicial é menor que a data final e depois

 

DateDiff(intervalo, data1, data2)

 

Onde intervalo é d

 

Ficando

 

DateDiff(d,01/01/2015,11/01/2015)

 

Vai retornar 11

 

Depois você multiplica

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá rafael blza!

 

Esse é o caminho mesmo, segue mais um exemplo do citado.

 

https://mateusgamba.wordpress.com/2010/09/30/comparar-datas-e-diferenca-de-dias-em-asp/

 

 

Vai postando ai.

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primero voce compara se a data inicial é menor que a data final e depois

 

DateDiff(intervalo, data1, data2)

 

Onde intervalo é d

 

Ficando

 

DateDiff(d,01/01/2015,11/01/2015)

 

Vai retornar 11

 

Depois você multiplica

ronaldo vou fazer o teste aqui e retorno, mas de cara ja tenho um problema na hora de alugar eu gravo o dia atual da locação exemplo:

locação hoje data_inicial recebe 09/01/2015 10:05:33 data fim fica em branco.

No final do mes vou ter uma pagina chamada fechamento onde vai colocar data de cobrança manualmente data inicio 01/01/2015 e data fim 31/01/2015,

 

Ae vem a duvida eu consigo fazer um if para so inserir onde esteja em branco nas colunas correspondentes?

var_data_inicial_manual=request.form("data_inicial")

var_data_fim_manual=request.form("data_fim")

 

if data_inicial = "" then

update set data_inicial= '"&var_data_inicial_manual&"'

Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 1, 3
end if

if data_fim = "" then

update set data_fim= '"&var_data_fim_manual&"'

Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 1, 3
end if

 

Olá rafael blza!

 

Esse é o caminho mesmo, segue mais um exemplo do citado.

 

https://mateusgamba.wordpress.com/2010/09/30/comparar-datas-e-diferenca-de-dias-em-asp/

 

 

Vai postando ai.

 

vlw

vou criar um formulario e fazer o teste recolhendo para teste em cima desse link tao bem explicado qnt o do ronaldo, o problema que quero gerar uma especie de fechamento e tenho algumas condicionais como mostrei a cima

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi muito bem.

 

Acho que esta falando que nao tem data final ?

 

Se for isso é simples

 

Pega quantos dias tem o mes atual (data inicial) e faz o sistema colocar a data final no codigo sem gravar no banco

 

Ai vc fica com DI e DF e pode usar a funcao acima

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi muito bem.

 

Acho que esta falando que nao tem data final ?

 

Se for isso é simples

 

Pega quantos dias tem o mes atual (data inicial) e faz o sistema colocar a data final no codigo sem gravar no banco

 

Ai você fica com DI e DF e pode usar a funcao acima

Ronaldo eu tenho uma pagina central de ação nela esta todas as tarefas locaçao devoluçao troca certo. ae todo fim de mes preciso fazer o calculo de cada um dos itens.

so que ao alugar coloquei para gravar o dia da locaçao no dia inicial e se virar o mes(locado) ele nao vai ter uma data final para fazer o calculo. dae a ideia de ver no banco se estiver em branco completar com a data que o usuario colocar manualmente no formulario.

 

Ronaldo agora digeri sua informação e como faria isso so no codigo?faria o "myrst.fields("data_fim) e depois faria o if pra ver se ta vazia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao precisa nada disso.

 

A locação é cobrada por mês? Exemplo

 

Locou dia 12/01/2015

Hoje é 31/01/2015

 

Vai ser cobrado ? Ou vai esperar o fim ?

 

Se for cobrado é do jeito que falei

 

QtosDiasTemOMes(date) essa funcao existe por ai, é so procurar

 

While not ...

 

If DataFinal = or isnull(Datafinal) then

DataFinal = QtosDiasTemOMes & / & Month(date) & / & year(date)

End if

 

DiasCobrar = DateDiff(d,DataInicial,DataFinal)

 

multiplica

 

Wend

 

Esqueci...

 

Quando virar o mes vc vai ter que fazer dentro do while uma maneira de pegar somente o mes atual para cobrar.

 

Nao é dificil, mas como estou de ferias estou respondendo do iPad e nao tenho os meus codigos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao precisa nada disso.

 

A locação é cobrada por mês? Exemplo

 

Locou dia 12/01/2015

Hoje é 31/01/2015

 

Vai ser cobrado ? Ou vai esperar o fim ?

 

Se for cobrado é do jeito que falei

 

QtosDiasTemOMes(date) essa funcao existe por ai, é so procurar

 

While not ...

 

If DataFinal = “” or isnull(Datafinal) then

DataFinal = QtosDiasTemOMes & / & Month(date) & / & year(date)

End if

 

DiasCobrar = DateDiff(d,DataInicial,DataFinal)

 

multiplica

 

Wend

É cobrada por mes sim Ronaldo, na verdade tem um teto 85 reais para descktop e o valor maximo de cobrança que se cobra 30 dias independente de ser 31 ou 28(fevereiro) ae na conta seria 2.833333 entao ficaria assim o codigo?

 

While not ...

 

If DataFinal = “” or isnull(Datafinal) then

DataFinal = 30 & / & Month(date) & / & year(date)

End if

 

DiasCobrar = DateDiff(d,DataInicial,DataFinal)

 

DiasCobrar=DiasCobrar x 2.83333333

 

Wend

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu tinha um cliente que cobrava por mês... e algumas vezes, isso financeiramente falando para o cliente dele entender era difícil, pois muitos não entenderão o 2.833333, ou a porcentagem de dias mediante ao R$ 85,00, no seu caso. melhor cobrar por dia.... apenas adicione o número de dias a partir da data de locação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se colocar 30 direto da erro em fevereiro.

 

Melhor seria ultimo dia do mes, mas ai a escolha é sua

ronaldo se eu fizer a comparação do dia 1 ao dia 30 conta 29 em vez de 30 vc sabe pq? fiz o teste com oustras datas 05/01/2015 ate 30/01/2015 conta 25 e assim por diante so no dia 1 ao 30 que conta 29.

eu tinha um cliente que cobrava por mês... e algumas vezes, isso financeiramente falando para o cliente dele entender era difícil, pois muitos não entenderão o 2.833333, ou a porcentagem de dias mediante ao R$ 85,00, no seu caso. melhor cobrar por dia.... apenas adicione o número de dias a partir da data de locação.

tem como eu fazer um case dentro do while? explicar melhor tenho outros itens no banco desktop custo mensal 85 monitor adicional custo mensal 17, nobreak 25, impressora 55. a ideia era caso descrição igual a ???? faz o calculo dos dias e de valores de aluguel.

tem como fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rafael, blza!

 

A contagem está certa mesmo.

 

você só passa a contar um dia, após a virada do mesmo, exemplo:

 

do dia 01 ao dia 02 da 01 dia

do dia 01 ao dia 03 da 02 dia

do dia 01 ao dia 30 da 29 dias e não 30 como você está pensando.

 

Rode esse Code em sua máquina e veja os resultados, ( você pode brincar com as DATAS e ver os Resultados ). Depois você poderá inserir os campos para que sejam dinâmicos.

 

 

Depois é só você adapta-lo para sua necessidade.

<%
DataInicial = "01/01/2015"
 
DataFinal = "30/01/2015"

If DateValue(DataFinal)=>DateValue(DataInicial) Then

    DiasUso = DateDiff("d",DataInicial,DataFinal)
	
    Response.Write "Data do Aluguel: "&DataInicial&" <br><br>"
	
    Response.Write "Data da Devolucao: "&DataFinal&" <br><br>"
	
    Response.Write "Dias de uso: "&DiasUso&" dias.<br><br>"
	
    DiasCobrar = DiasUso * 2.83333333
	
    Response.Write "Cobranca de: R$ "&DiasCobrar&""
	
End If
%>

Espero ter ajudado,

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rafael, blza!

 

A contagem está certa mesmo.

 

você só passa a contar um dia, após a virada do mesmo, exemplo:

 

do dia 01 ao dia 02 da 01 dia

do dia 01 ao dia 03 da 02 dia

do dia 01 ao dia 30 da 29 dias e não 30 como você está pensando.

 

Rode esse Code em sua máquina e veja os resultados, ( você pode brincar com as DATAS e ver os Resultados ). Depois você poderá inserir os campos para que sejam dinâmicos.

 

 

Depois é só você adapta-lo para sua necessidade.

<%
DataInicial = "01/01/2015"
 
DataFinal = "30/01/2015"

If DateValue(DataFinal)=>DateValue(DataInicial) Then

    DiasUso = DateDiff("d",DataInicial,DataFinal)
	
    Response.Write "Data do Aluguel: "&DataInicial&" <br><br>"
	
    Response.Write "Data da Devolucao: "&DataFinal&" <br><br>"
	
    Response.Write "Dias de uso: "&DiasUso&" dias.<br><br>"
	
    DiasCobrar = DiasUso * 2.83333333
	
    Response.Write "Cobranca de: R$ "&DiasCobrar&""
	
End If
%>

Espero ter ajudado,

 

vlw

will entendi a parte de so qnd vira o dia pq entao de 05/01/2015 a 30/01/2015 da 25 e nao 24 dias? vou testar com seu code aki eu to usando esse para testar as datas:

 

datainicial = "01/01/2015"
DataFinal = ""
If DataFinal = "" or isnull(Datafinal) then
DataFinal = "30" & "/" & Month(date) & "/" & year(date)
End if
diferenca_dias = DateDiff("d",datainicial,DataFinal)
Cobrar=(diferenca_dias * 2.83333333)
response.write "Dias em uso "&diferenca_dias&".<br><br>"
response.write "Valor a cobrar no mes "&cobrar&".<br><br>"
response.end

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rafael,

 

05/01/2015 a 30/01/2015 são 25 dias mesmo, e não 24.

 

Do dia 05 a dia 06 da 01 dia

 

Do dia 05 a dia 07 da 02 dias

 

Do dia 05 a dia 30 da 25 dias e não 24

 

Lembre-se que o dia será contado após a virada do mesmo.

 

 

Faça esses Campos Dinâmicos e use dentro do exemplo que te passei, não irá resolver no que quer?

DataInicial

DataFinal

ValorDiaria

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Olá Rafael,

 

05/01/2015 a 30/01/2015 são 25 dias mesmo, e não 24.

 

Do dia 05 a dia 06 da 01 dia

 

Do dia 05 a dia 07 da 02 dias

 

Do dia 05 a dia 30 da 25 dias e não 24

 

Lembre-se que o dia será contado após a virada do mesmo.

 

 

Faça esses Campos Dinâmicos e use dentro do exemplo que te passei, não irá resolver no que quer?

DataInicial

DataFinal

ValorDiaria

will to usando seu exemplo, se fizer a diferença do dia 01 ou 25 da 25 dias certo, mas se fizer do dia 01 ou dia 30 da 29 :upset: :upset: :upset: onde preciso que de 30. se eu colocar 01 a 31 bate 30 dias mas ae nas proratas fica errado 05 ate 31 da 26 dias

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rafael,

 

Bom, já que precisa que os dias sejam desta forma como postou no #post1:

 

 

#1 data_aluguel 01-01-2015

data_devolucao 31-01-2015

dias_usados:31

#2 dias_usados x 2.83333
cobranca:87.833

Segue o CODE alterado:

<%
DataInicial = "01/01/2015"
 
DataFinal = "31/01/2015"

If DateValue(DataFinal)=>DateValue(DataInicial) Then

    DiasUso = DateDiff("d",DataInicial,DataFinal)+1
	
    Response.Write "Data do Aluguel: "&DataInicial&" <br><br>"
	
    Response.Write "Data da Devolucao: "&DataFinal&" <br><br>"
	
    Response.Write "Dias de uso: "&DiasUso&"  dias.<br><br>"
	
    DiasCobrar = DiasUso * 2.83333333
	
    Response.Write "Cobranca: "&DiasCobrar&""
	
End If
%>

Veja se desta forma é como quer?

 

 

Resultado do Code acima:

 

Data do Aluguel: 01/01/2015

Data da Devolucao: 31/01/2015

Dias de uso: 31 dias.

Cobranca: 87,83333323

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rafael,

 

Bom, já que precisa que os dias sejam desta forma como postou no #post1:

 

Segue o CODE alterado:

<%
DataInicial = "01/01/2015"
 
DataFinal = "31/01/2015"

If DateValue(DataFinal)=>DateValue(DataInicial) Then

    DiasUso = DateDiff("d",DataInicial,DataFinal)+1
	
    Response.Write "Data do Aluguel: "&DataInicial&" <br><br>"
	
    Response.Write "Data da Devolucao: "&DataFinal&" <br><br>"
	
    Response.Write "Dias de uso: "&DiasUso&"  dias.<br><br>"
	
    DiasCobrar = DiasUso * 2.83333333
	
    Response.Write "Cobranca: "&DiasCobrar&""
	
End If
%>

Veja se desta forma é como quer?

 

 

Resultado do Code acima:

 

Data do Aluguel: 01/01/2015

 

Data da Devolucao: 31/01/2015

 

Dias de uso: 31 dias.

 

Cobranca: 87,83333323

will na verdade o teto de dias é 30 e o teto do valor que pode ser cobrado é 85 logo 30*2.833333 da 85, por isso a questao do dia 30 e nao 29 pensei nisso tbm de incluir um +1 so que ele tbm nao acresentaria nakela outra situação 05/01/2015 ate 30/01/2015= 25 dias ae somaria +1 e daria errado o calculo, teria sido usado por 25 dias e seria cobrado 26 dias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, a lógica você já tem.

 

Se o teto é de 30 dias, você pode fazer a verificação dos meses com 31 dias.

 

If meses com 31 dias

 

mostra 30 dias

 

Else If

 

Mostra a data normal

 

End If

 

Seria mais ou menos isso

 

Assim nunca será maior que 30 dias

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, a lógica você já tem.

 

Se o teto é de 30 dias, você pode fazer a verificação dos meses com 31 dias.

 

If meses com 31 dias

 

mostra 30 dias

 

Else If

 

Mostra a data normal

 

End If

 

Seria mais ou menos isso

 

Assim nunca será maior que 30 dias

show outra duvida como arredondar um valor como falei precisa ser 85 fechado e 2.8333333 da 84.99999 como arredondo pra 85?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vc pode usar as funções Round() ou Int ()

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.