Dividere la data per 2 applicazione in visual studio 2005

mercoledì 21 maggio 2008 - 13.51

Mau67 Profilo | Expert

Salve a tutti quello che stò per chiedere è un pò urgente e non riesco a venirne fuori qulcuno può aiutarmi?

Espongo il problema ho scritto questo codice che mi serme per trovare il risultato in anni mesi e giorni dalla differenza tra due date (posto il codice)

Public Function CalcolaAnni(ByVal InizioTextBox As Date, ByVal FineTextBox As Date)
'ANNI
Dim VarAnni As Object
VarAnni = DateDiff("yyyy", InizioTextBox, FineTextBox)
If FineTextBox < DateSerial(FineTextBox.Year, InizioTextBox.Month, InizioTextBox.Day) Then
VarAnni = VarAnni - 1
Me.TextBox1.Text = VarAnni
End If
Me.TextBox1.Text = VarAnni
'--------------------------------
'MESI
Dim VarMesi As Object
VarMesi = DateDiff("m", InizioTextBox, FineTextBox)
VarMesi = VarMesi - (VarAnni * 12)
If DatePart("d", InizioTextBox) > DatePart("d", FineTextBox) Then
VarMesi = VarMesi - 1
Me.TextBox2.Text = VarMesi
End If
Me.TextBox2.Text = VarMesi
'--------------------------------
'GIORNI
Dim GiornoInizio As Object
Dim GiornoFine As Object
Dim giorni As Object
Dim TempGiornoInizio As Object
GiornoInizio = DatePart("d", InizioTextBox)
GiornoFine = DatePart("d", FineTextBox)
If GiornoFine >= GiornoInizio Then
giorni = GiornoFine - GiornoInizio
Me.TextBox3.Text = giorni + 1
Else
TempGiornoInizio = DateAdd("m", -1, FineTextBox)
giorni = DateDiff("d", TempGiornoInizio, FineTextBox) - (GiornoInizio - GiornoFine)
Me.TextBox3.Text = giorni + 1
End If
End Function

Adesso mi servirebbe che la differenza tra due date mi desse il risultato esattamente diviso per 2 cioè vi faccio un esempio

Se ho le seguenti date 21/10/1970 e 23/10/1973 il risultato è 3 anni 0 mesi 2 giorni io ho la necessità di dividerli per 2 e quindi il risultato diventa

1 anno 6 mesi 1 giorno qualcuno può aiutarmi grazie in anticipo.

Mau67

assiolle Profilo | Junior Member

Io cambierei la logica.
Farei una funzione che mi ritorna il numero di giorni.
15/05/2003 al 15/05/2008 -> 1825 giorni. Quindi dividerei per 2, arrotondando al giorno. Quindi 913 giorni.Infine una funzione che secondo il numero di giorni complessivo ti ritorna Anni,Mesi e Giorni.

Alessio
http://blogs.dotnethell.it/alessiop

Mau67 Profilo | Expert

Grazie della risposta ho risolto in questo modo se servisse a qualcuno


Dim Virtuale As Date = Me.FineTextBox.Text
Dim giorni As Double
giorni = DateDiff("d", Me.InizioTextBox.Text, Me.FineTextBox.Text)
giorni = Virtuale.ToOADate - CInt(giorni / 2)
Me.FineMetàTextBox.Text = Date.FromOADate(giorni)

Praticamente ho trovato la differenza tra due date in giorni, li ho divisi per 2 e li ho sottratti alla data fineTextBox trasformandola in data e poi ho usato la funzione pubblica che mi calcola i giorni mesi ed anni cosi

Public Function CalcolaAnniMetà(ByVal InizioTextBox As Date, ByVal FineMetàTextBox As Date)
'ANNI
Dim VarAnni As Object
VarAnni = DateDiff("yyyy", InizioTextBox, FineMetàTextBox)
If FineMetàTextBox < DateSerial(FineMetàTextBox.Year, InizioTextBox.Month, InizioTextBox.Day) Then
VarAnni = VarAnni - 1
Me.TextBox1.Text = VarAnni
End If
Me.TextBox1.Text = VarAnni
'--------------------------------
'MESI
Dim VarMesi As Object
VarMesi = DateDiff("m", InizioTextBox, FineMetàTextBox)
VarMesi = VarMesi - (VarAnni * 12)
If DatePart("d", InizioTextBox) > DatePart("d", FineMetàTextBox) Then
VarMesi = VarMesi - 1
Me.TextBox2.Text = VarMesi
End If
Me.TextBox2.Text = VarMesi
'--------------------------------
'GIORNI
Dim GiornoInizio As Object
Dim GiornoFine As Object
Dim giorni As Object
Dim TempGiornoInizio As Object
GiornoInizio = DatePart("d", InizioTextBox)
GiornoFine = DatePart("d", FineMetàTextBox)
If GiornoFine >= GiornoInizio Then
giorni = GiornoFine - GiornoInizio
Me.TextBox3.Text = giorni + 1
Else
TempGiornoInizio = DateAdd("m", -1, FineMetàTextBox)
giorni = DateDiff("d", TempGiornoInizio, FineMetàTextBox) - (GiornoInizio - GiornoFine)
Me.TextBox3.Text = giorni + 1
End If
End Function

Ciao a tutti
Mau67
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5