CALCULO ENTRE DATAS

ROBFERREIRAA 31/10/2012 14:12:22
#413278
fala galera
tenho este codigo que faz calculos entre datas como eu faço para subtrair finais de semana e feriados

Dim date2Entered As String = dtVencimento.Text
Dim date1Entered As String = mskValorpercela.Text
Try
Dim date2 As Date = Date.Parse(date2Entered)
Dim date1 As Date = Date.Parse(date1Entered)


Dim days As Long = DateDiff(DateInterval.Day, date1, date2)
Dim day As Long = DateDiff(DateInterval.Weekday, date1, date2)

MessageBox.Show([Ô]Dias até hoje: [Ô] & days.ToString)
Catch ex As Exception
MessageBox.Show([Ô]Data invalida: [Ô] & ex.Message)
End Try

grato
FFCOUTO 31/10/2012 15:53:04
#413285
Basta você realizar um For Next entre a data 1 e a data 2 e contar quantos dias são sábados e domingos, e após isso, subtrair do total de dias encontrados.
No caso dos feriados você tem de fazer uma lista para comparar com as datas dentro desse mesmo laço For Next
VELDRAME 01/11/2012 15:46:09
#413381
Resposta escolhida
Mais simples ainda
Exemplo.
DateDiff ([Ô]d[Ô],[Ô]2012-01-01[Ô],[Ô]2012-02-10[Ô]) vai me retornar 40 dias

Eu sei que a semana tem 7 dia, logo
40/7 será a qtd de semana existente no resultado.
5.714

Já sei que tenho 5 semanas, mais ainda me sobram alguns pontos.
Mas uma coisa por vez.

Se cada semanda tem 2 dias no fim (Sab e Dom) sei que terei 10 dias de fim de semana.
que é: 5 x 2 = 10 (entre sabados e domingos)

Para saber a diferença lá de cima vamos prosseguir assim.

7 x 5 = 35
40 - 35 = 5
então os [Ô]0,714[Ô] é equivalem a 5 dias.

Agora você vai ter que ver como montar isso:
Se o 1º dia da formula é sabado o 40° dia será quarta.
Assim sendo o resto (aqueles 5 dias) serão Sab, Dom, Seg, Ter e Qua.
Então você tem nesse exemplo, 12 fins de semana.


Espero que você tenha entendido.

E possa simplificar para você.


VELDRAME 01/11/2012 16:08:43
#413387
E ai cara, beleza?
Ache que a função de cima ficou meio complicada né?

Segue algo mais prático

Dim wDataInical, wDataFinal, wDataAtual As Date

wDataInical = [Ô]2012-01-01[Ô]
wDataFinal = [Ô]2012-02-10[Ô]
wDataAtual = wDataInical

Do While wDataAtual <> wDataFinal
Dim wDiaSemana As String
Dim qtdDias As Integer
If Weekday(wDataAtual) = 1 Or Weekday(wDataAtual) = 7 Then
qtdDias = qtdDias + 1
End If

[ô]Aqui você abre seu Recordset (DataSet)
using ds as new sqlconnection (conexao)
Do While Not ds.read (sei lá agora não lembro bem, mais acho que é isso)
If wDataAtual = rs!Feriado Then
qtdDias = qtdDias + 1
End If
rs.movenext
Loop
using end

wDataAtual = DateAdd([Ô]d[Ô], 1, wDataAtual)
Loop

MsgBox [Ô]Dias: [Ô] & qtdDias & [Ô][Ô]


[txt-color=#e80000]
O importante é a Lógica da coisa.
Boa Sorte
[/txt-color]
PROGRAMADORVB6 01/11/2012 20:26:43
#413412
Olá
Pode-se saber qual é o objectivo?
Depende do que queira fazer.
ROBFERREIRAA 04/11/2012 19:07:39
#413451
desculpe a demora para responder estava bem enrolado aqui preciso montar sla. VELDRAME pq sql connection
Tópico encerrado , respostas não são mais permitidas