Moi
Olisi saatava vähän apua kun en saa DateDiff:llä toimimaan kellon aikojen vertailua, eli haen alku kelloaika ja loppu kelloaika eron esim. minutteina
VB6:ssa DateDiff toimi mutta tässä uudessa (minulle) 2010 versiossa ei vaan toimi
minkähänlainen koodi pitäisi kirjoittaa
VB6 oli tämä
Private Sub laske_tyoaika()
Dim aikaero1 As Single
Dim ero As Long
Dim aikaero As Long
Dim aikaero3 As Single
Dim aikaero2 As Single
If MTX_lopetusaika.Text <> "__:__" Then
ero = DateDiff("n", Val(MTX_aloitusaika.Text), Val(MTX_lopetusaika.Text)) ' aikaero minuutteina
If ero <= 60 Then ' jos 1 tunti tai alle tunti
TX_tilaus10.Text = Format(Val(TX_tilaus10.Text) + ero / 60, "0.00")
Exit Sub
Else
aikaero1 = ero Mod 60 ' jakojäännös täysistä tunneista minuutteina
aikaero2 = aikaero1 / 60
aikaero3 = Int(ero / 60) ' täydet tunnit
aikaero = aikaero3 + aikaero2 ' täydet tunnit plus osatunti
TX_tilaus10.Text = Format(Val(TX_tilaus10.Text) + aikaero, "##0.00")
End If
End If
Exit Sub
out: MsgBox("Tarkista työajat")
MTX_aloitusaika.SetFocus()
End Suberkki
Mod. lisäsi kooditagit!
Jotenkin purkan näköinen, mutta jos säästän purkat niin:
Private Sub laske_tyoaika()
Dim aikaero1 As Single
Dim ero As Long
Dim aikaero As Long
Dim aikaero3 As Single
Dim aikaero2 As Single
If MTX_Lopetusaika.Text <> "__:__" Then
Dim aikaEr = DateTime.ParseExact(MTX_Lopetusaika.Text, "HH:mm", System.Globalization.CultureInfo.InvariantCulture) - _
DateTime.ParseExact(MTX_Aloitusaika.Text, "HH:mm", System.Globalization.CultureInfo.InvariantCulture)
ero = CLng(aikaEr.TotalMinutes) ' aikaero minuutteina
If ero <= 60 Then ' jos 1 tunti tai alle tunti
TX_tilaus10.Text = Format(Val(TX_tilaus10.Text) + ero / 60, "0.00")
Exit Sub
Else
aikaero1 = ero Mod 60 ' jakojäännös täysistä tunneista minuutteina
aikaero2 = aikaero1 / 60
aikaero3 = Int(ero / 60) ' täydet tunnit
aikaero = aikaero3 + aikaero2 ' täydet tunnit plus osatunti
TX_tilaus10.Text = Format(Val(TX_tilaus10.Text) + aikaero, "##0.00")
End If
End If
Exit Sub
out: MsgBox("Tarkista työajat")
MTX_Aloitusaika.Focus()
End SubJa jos pahimmat purkat poistan niin:
Private Sub laske_tyoaika()
If MTX_Lopetusaika.Text <> "__:__" Then
Dim aikaEro = DateTime.ParseExact(MTX_Lopetusaika.Text, "HH:mm", System.Globalization.CultureInfo.InvariantCulture) - _
DateTime.ParseExact(MTX_Aloitusaika.Text, "HH:mm", System.Globalization.CultureInfo.InvariantCulture)
Dim tunnit As Double = 0
Double.TryParse(TX_tilaus10.Text, tunnit)
tunnit += aikaEro.TotalHours
TX_tilaus10.Text = tunnit.ToString("0.00")
Else
MsgBox("Tarkista työajat")
MTX_Aloitusaika.Focus()
End If
End SubJa tässä huvin vuoksi vielä snadisti vähemmän purkka VB6 -versio:
Private Sub laske_tyoaika()
If MTX_lopetusaika.Text <> "__:__" Then
Dim tunnit As Double
If (IsNumeric(TX_tilaus10.Text)) Then tunnit = CDbl(TX_tilaus10.Text)
tunnit = tunnit + 24 * (CDate(MTX_lopetusaika.Text) - CDate(MTX_aloitusaika.Text))
TX_tilaus10.Text = Format(tunnit, "0.00")
Else
MsgBox ("Tarkista työajat")
MTX_aloitusaika.SetFocus
End If
End SubOn nyt taas venähtänyt....
Jotain on väärin kun kumpikaan esimerkki ei toimi > " Merkkijonoa ei tunnistettu kelvolliseksi DateTime-arvoksi. "
erkki
No onko se merkkijono esim. 12:33 vai jotain muuta?
Aihe on jo aika vanha, joten et voi enää vastata siihen.