HrSteen Skrevet 7. desember 2006 Skrevet 7. desember 2006 Jeg får inn 2 verdier i min funksjon: dato som en string og en formatmaske som en string. årsaken er at jeg aldri vet hvilken format datoen er på uten at jeg enten bygger opp masse logikk eller rett og slett ser på tilhørende formatmaske. Feks: sDate = 02012006 <- dette får jeg inn sFormatstring = DDMMYYYY <- dette får jeg inn Prøver meg da på en format. Format(sDate, sFormatstring) og får dette resultatet: 06097408 Hvorfor? Jeg skal konvertere sDate til en datevariabel, men grunnet mange rare måter å sette opp datoen på så må jeg benytte meg av formatmasken som kommer med. Hvis noen skjønner, så er hjelpen veldig etterlengtet
Harald Staff Skrevet 7. desember 2006 Skrevet 7. desember 2006 (endret) Dato-tid fungerer slik: 1 er et døgn; 24 timer. Dag null er nyttår til år 1900. 12 er 12. dag siden nyttår til 1900, altså 11.januar 1900. 02012006 er ingen dato, det er tallet 2 012 006. To millioner noen døgn etter nyttår til 1900 er 6.september 7408. Hvis du vet du får dato på format ddmmyyyy så er det lett å regne om. Men det er utallige gyldige datoformater på norsk, samt ikke-datoer a la millionene du strever med. En generell, entydig måte å forstå datoinput riktig er dermed ikke mulig. Edit: Ah, du får altså levert med formatmaske ja. Da går det jo an å skrive en funksjon som tolker tallene riktig. Tror du da må behandle tallene som en streng og splitte i tre strenger, og til slutt regne om til dato fra verdien av de tre strengene. Dette kan jo gå litt tregt da... HTH. Beste hilsen Harald Endret 7. desember 2006 av Harald Staff
HrSteen Skrevet 7. desember 2006 Forfatter Skrevet 7. desember 2006 Akkurat ja.. Da ble jeg litt klokere. Får prøve å skrive meg en funksjon som gjør dette. Slik jeg har løst det pr idag så prøver jeg meg frem med ymse logikk til jeg treffer en datoformat som virker korrekt. Logisk gjetting.
Harald Staff Skrevet 7. desember 2006 Skrevet 7. desember 2006 Så bra. Som sagt er en dato bare et tall, og når det først er det så kan du formatere som du vil; mmddyy eller ddmmyy er bare visuelle representasjoner av tallet. Anbefaler å bruke dateSerial til omvandling, den er helt entydig: Dt = DateSerial(2007, 5, 17) gir 17 mai 07 uavhengig av formater og lokale innstillinger. Beste hilsen Harald
aadnk Skrevet 7. desember 2006 Skrevet 7. desember 2006 Jeg vil tro følgende funksjon vil kunne gjøre nettopp dette: Public Function ExtractDate(Text As String, Format As String) As Date 'On Error Resume Next ' Konverter tekst til dato ved å legge formatmasken til grunn ExtractDate = DateSerial(Val(Mask(Text, Format, "Y", " ")), _ Val(Mask(Text, Format, "M", " ")), Val(Mask(Text, Format, "D", " "))) End Function ' Erstatter alle karakterer som ikke korresponderer med den gitte karakterer Private Function Mask(Text As String, Format As String, cFind As String, cReplace As String) As String Dim Tell As Long ' Kopier inndata til returstreng Mask = Text For Tell = 1 To Len(Text) ' Sjekk denne karakteren If Mid(Format, Tell, 1) <> cFind Then Mid(Mask, Tell, 1) = cReplace End If Next End Function
HrSteen Skrevet 21. desember 2006 Forfatter Skrevet 21. desember 2006 *sukk* etter å ha knotet ei stund så ser jeg jo at formatmasken som leveres ikke samsvarer med datoen som leveres... Skal ikke være enkelt.
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå