Avatar billede hubertus Seniormester
26. september 2020 - 19:08 Der er 6 kommentarer og
1 løsning

Datoproblem med Now, når værdien overføres til en funktion

Er der mon en ekspert der kan løse denne knude for mig.  Jeg har et problem med et funktions kald, hvor NOW giver en forkert serial værdi.

dato i dag 26092020  har en serial værdi 44100, men når den overføres til funktionen, så er værdien lngdate = 44101. hvad er årsagen til det?

funktionen returnere true / false afhængig af om det er: hverdag, weekend eller helligdag.

Sub test()
      not_wortking_day = IsHoliday(now, 1, 1)
End Sub

Function IsHoliday(LngDate As Long, InclSaturdays As Boolean, InclSundays As Boolean) As Boolean
       
    ' (optionally included Saturdays/Sundays -  boolsk værdi derfor 0 eller 1 )
   
    ' benytter funksjonen EasterSunday
   
    Dim InputYear As Integer, ES As Long, OK As Boolean
   
    If LngDate <= 0 Then LngDate = Date
   
    InputYear = Year(LngDate)
   
    ES = EasterSunday(InputYear)
   
    OK = True
   
    Select Case LngDate
       
        Case DateSerial(InputYear, 1, 1) ' 1. Nyttårsdag
   
        'Case ES - 4 ' Onsdag før påske
   
        Case ES - 3 ' Skjærtorsdag
   
        Case ES - 2 ' Langfredag
   
        Case ES ' 1. Påskedag
   
        Case ES + 1 ' 2. Påskedag
   
        Case DateSerial(InputYear, 5, 1) ' 1. mai
   
        Case DateSerial(InputYear, 5, 17) ' 17. mai
   
        Case ES + 39 ' Kristi Himmelfartsdag
   
        'Case ES + 48 ' Pinseaften
   
        Case ES + 49 ' 1. Pinsedag
   
        Case ES + 50 ' 2. Pinsedag
   
        'Case DateSerial(InputYear, 12, 24) ' Julaften
   
        Case DateSerial(InputYear, 12, 25) ' 1. Juledag
   
        Case DateSerial(InputYear, 12, 26) ' 2. Juledag
   
        'Case DateSerial(InputYear, 12, 31) ' Nytårsaften
   
        Case Else  ' tjek på lørdag / søndag
   
            OK = False
       
            If InclSaturdays Then
                If Weekday(LngDate, vbMonday) = 6 Then
                    OK = True
                End If
            End If
       
            If InclSundays Then
                If Weekday(LngDate, vbMonday) = 7 Then
                    OK = True
                End If
            End If
       
    End Select
   
    IsHoliday = OK
   
End Function


Function EasterSunday(InputYear As Integer) As Long

' Returns the date for Easter Sunday, does not depend on Excel

Dim d As Integer

d = (((255 - 11 * (InputYear Mod 19)) - 21) Mod 30) + 21

EasterSunday = DateSerial(InputYear, 3, 1) + d + (d > 48) + 6 - ((InputYear + InputYear \ 4 + d + (d > 48) + 1) Mod 7)

End Function
Avatar billede claes57 Ekspert
26. september 2020 - 19:28 #1
og den ved, at du er i Danmark? Hvis pc/win tror, du er i usa, så kan det let skifte...
Avatar billede hubertus Seniormester
26. september 2020 - 20:08 #2
Hej Claes
koden afvikles på vores erp system, som er et internationalt system, så det er en mulighed. Kan jeg tage højde for det i koden?
Avatar billede hubertus Seniormester
26. september 2020 - 20:28 #3
Jeg har lige tjekket tidszonen. Den er (UTC+01:00) Brussels, Copenhagen, Madrid, Paris. så det er jo korrekt nok
Avatar billede claes57 Ekspert
27. september 2020 - 09:49 #4
jeg har fundet en lidt kringlet løsning, der først sætter now() til utc i en tekst, og så går videre fra den.
https://powerusers.microsoft.com/t5/Building-Power-Apps/Eastern-Time-Zone-Using-Now-Function/m-p/18331#M7982
Lav en funktion i stil med EasterSunday, så det ikke roder i din kode i øvrigt.
Avatar billede store-morten Ekspert
27. september 2020 - 11:15 #5
NOW indeholde også tid.
Prøv med: TODAY
Avatar billede store-morten Ekspert
27. september 2020 - 12:52 #6
Eller: DATE
Avatar billede hubertus Seniormester
03. oktober 2020 - 08:16 #7
Date har vist sig at løse mit problem. Hvorfor kan jeg ikke helt gennemskue, men fint at det lykkedes, så tak for hjælpen Morten.
God weekend til jer begge. :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester