C?LCULO ENTRE DATA
Bom dia
Estou tentando fazer um cálculo entre datas gostaria de obter o seguinte resultado.
Exemplo:
PerÃodo entre 10/01/2016 a 20.04.2016
Resultado: Você está com 14 Semanas e 3 dias
Grato
Talvez aqui esteja a sua resposta:
http://pt.stackoverflow.com/questions/6158/como-obter-o-n%C3%BAmero-de-semanas-num-intervalo-de-datas-em-c
Sei que está em C# mas é muito fácil adaptar ao seu código em VB.Net.
http://pt.stackoverflow.com/questions/6158/como-obter-o-n%C3%BAmero-de-semanas-num-intervalo-de-datas-em-c
Sei que está em C# mas é muito fácil adaptar ao seu código em VB.Net.
NILTON_VIANNA
Criei uma função para este fim, é só adaptar ao seu Sistema.
Public Function DateDiffWeekAndDay(dataInicial As DateTime, dataFinal As DateTime) As String
Dim countDia As Integer = Convert.ToInt32(dataFinal.Subtract(dataInicial).TotalDays)
Dim countSemana As Integer = IIf(countDia > 0, (countDia / 7), 0)
Dim sobraDia As Integer = (countDia Mod 7)
If (countDia > 0) Then
If (countSemana > 0 And sobraDia > 0) Then
Return [Ô]Você está com [Ô] & countSemana.ToString() + [Ô] semana(s) e [Ô] & sobraDia.ToString() & [Ô] dia(s)[Ô]
ElseIf (countSemana > 0 And sobraDia = 0) Then
Return [Ô]Você está com [Ô] & countSemana.ToString() + [Ô] semana(s)[Ô]
Else
Return [Ô]Você está com [Ô] & countDia.ToString() + [Ô] dia(s)[Ô]
End If
Else
Return String.Empty
End If
End Function
Criei uma função para este fim, é só adaptar ao seu Sistema.
Public Function DateDiffWeekAndDay(dataInicial As DateTime, dataFinal As DateTime) As String
Dim countDia As Integer = Convert.ToInt32(dataFinal.Subtract(dataInicial).TotalDays)
Dim countSemana As Integer = IIf(countDia > 0, (countDia / 7), 0)
Dim sobraDia As Integer = (countDia Mod 7)
If (countDia > 0) Then
If (countSemana > 0 And sobraDia > 0) Then
Return [Ô]Você está com [Ô] & countSemana.ToString() + [Ô] semana(s) e [Ô] & sobraDia.ToString() & [Ô] dia(s)[Ô]
ElseIf (countSemana > 0 And sobraDia = 0) Then
Return [Ô]Você está com [Ô] & countSemana.ToString() + [Ô] semana(s)[Ô]
Else
Return [Ô]Você está com [Ô] & countDia.ToString() + [Ô] dia(s)[Ô]
End If
Else
Return String.Empty
End If
End Function
Dim d1 As Date = [Ô]10/01/2016[Ô]
Dim d2 As Date = [Ô]20/04/2016[Ô]
Dim r As Decimal = Convert.ToDecimal(DateDiff(DateInterval.Day, d1, d2) / 7)
Dim semanas = Math.Truncate(r)
Dim dias = Math.Truncate((r - Math.Truncate(r)) * 10)
MsgBox([Ô]Esse intervalo de datas possui [Ô] & semanas & [Ô] semanas e [Ô] & dias & [Ô] dias[Ô])
Porque no teste na internet da um dia de diferença de um dia
Resultado
Provável em: 26/12/2015
Data provável: 16/10/2016
Status: 14 semanas e 3 dias
Data do teste: 20/04/2016
Resultado
Provável em: 26/12/2015
Data provável: 16/10/2016
Status: 14 semanas e 3 dias
Data do teste: 20/04/2016
Citação:Porque no teste na internet da um dia de diferença de um dia
Qual site?
Jaba
https://www.alobebe.com.br/portal/calculadora-gestacional/Default.asp
Talvez eles não estejam levando em conta o dia atual, pois ele ainda não terminou. Se quiser fazer que nem o deles, é só subtrair em 1 a variável dias. Em contrapartida, se você fizer o teste manualmente vai bater exatamente com o que eu te passei. Coloque um intervalo de duas semanas e com 1 dia a mais de diferença e veja o resultado.
JABA
Desta forma bate com quaisquer testes
Dim d1 As Date = txtDtaUm.Text [ô][Ô]10/01/2016[Ô]
Dim d2 As Date = Now [ô] [Ô]22/04/2016[Ô]
Dim r As Decimal = Convert.ToDecimal(DateDiff(DateInterval.Day, d1, d2) / 7)
Dim semanas = Math.Truncate(r)
Dim dias = Math.Truncate((r - Math.Truncate(r)) * 8)
Se multiplicando por 8 ficou bom para o que precisa, então deixe assim mesmo. Porém, saiba que perde um pouco da precisão, pois multiplicando por 10 só muda a virgula de lugar, já com o 8, muda os valores.
Valeu JABA
Tópico encerrado , respostas não são mais permitidas