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 Sub
erkki
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 Sub
Ja 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 Sub
Ja 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 Sub
On 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.