Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: datum afronden  (gelezen 6024 keer)

0 leden en 1 gast bekijken dit topic.

Offline Riekkes

  • Lid
  • *
  • Berichten: 74
  • Oplossing.be
datum afronden
« Gepost op: 08 mei 2023, 15:25:15 »
Beste,
in access heb ik een kolom waar een datum, vb 8/5/23, instaat en hierbij komt een aantal jaren bij om de volgende keuring van het toestel te weten, vb 4jaar.
dus de volgende keuring is op 8/5/27 maar deze datum zou moeten afgerond worden naar de eerste van volgende maand, 1/6/27.
kan dit
alvast bedankt
Lugano M Acer, Inc., SiS 760 Rev 00, Windows XP, Home, SP2, Mobile AMD Sempron(tm) Processor 2800+, 446 MB RAM, HDD:58 GB, FAT32, Norton AntiVirus, Internet Explorer 6.0, Microsoft Outlook

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.116
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: datum afronden
« Reactie #1 Gepost op: 08 mei 2023, 15:51:16 »
Hallo Riekkes,

in Excel zou ik de volgende formule kunnen gebruiken:
="1"&"/"&MAAND(A1)+1&"/"&JAAR(A1)+4
Mogelijk dat je dit in Access ook kan gebruiken.
Ik heb eerlijk gezegd nog nooit Access ge-opent  :-[

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline dizzl

  • Ambassadeur
  • *****
  • Berichten: 2.342
  • I've Upped my standards,now,up yours!
Re: datum afronden
« Reactie #2 Gepost op: 11 mei 2023, 15:56:21 »
Ik zou dit oplossen met een berekend veld in de tabel.
VB in bijlage
Oeps ik zie dat SoftAid 'beter/aandachtiger' leest dan ik. Berekend veld aanpassen year([Datum]) +4
Systeem  : Intel Core i5-4440 3.1Ghz, 3.1GHz 16Giga Ram 64Bits
Software : Windows 10 professional, Avira, Office 2016 Professional

Offline dizzl

  • Ambassadeur
  • *****
  • Berichten: 2.342
  • I've Upped my standards,now,up yours!
Re: datum afronden
« Reactie #3 Gepost op: 12 mei 2023, 19:21:09 »
btw ...ongeveer alles wat ik ooit met msAccess deed ..do ik nu met Google Sheets en Google Script
Systeem  : Intel Core i5-4440 3.1Ghz, 3.1GHz 16Giga Ram 64Bits
Software : Windows 10 professional, Avira, Office 2016 Professional

Offline Riekkes

  • Lid
  • *
  • Berichten: 74
  • Oplossing.be
Re: datum afronden
« Reactie #4 Gepost op: 13 mei 2023, 08:29:38 »
Beste dizzle,
dit is wat ik zocht
bedankt ik kan verder met mijn keuringen
Lugano M Acer, Inc., SiS 760 Rev 00, Windows XP, Home, SP2, Mobile AMD Sempron(tm) Processor 2800+, 446 MB RAM, HDD:58 GB, FAT32, Norton AntiVirus, Internet Explorer 6.0, Microsoft Outlook

Offline dizzl

  • Ambassadeur
  • *****
  • Berichten: 2.342
  • I've Upped my standards,now,up yours!
Re: datum afronden
« Reactie #5 Gepost op: 14 mei 2023, 19:50:18 »
Bedankt dat je laat weten dat dit voor jou werkt Riekkes
Systeem  : Intel Core i5-4440 3.1Ghz, 3.1GHz 16Giga Ram 64Bits
Software : Windows 10 professional, Avira, Office 2016 Professional

Offline Diezel

  • Oplosser
  • ****
  • Berichten: 508
  • Geslacht: Man
  • Meedenker - Initiatief nemen - Helpen oplossen...
Re: datum afronden
« Reactie #6 Gepost op: 21 mei 2023, 01:14:26 »
Dag Riekkes,

Indien je niet wil dat de keuringsdatum in het weekend en of op een Belgische betaalde feestdag valt op de eerste dag van de maand:

Private Function IsFeestdag(ByVal checkDatum As Date) As Boolean

    Dim feestdagen(1 To 5) As Date
    Dim jaar As Integer
    jaar = Year(checkDatum)
   
    ' Bepaal de feestdagen voor het opgegeven jaar
     'De feestdagen die mogelijks op de eerste dag van de maand kunnen vallen:
    feestdagen(1) = DateSerial(jaar, 1, 1) 'nieuwjaar
    feestdagen(2) = DateAdd("d", 1, BerekenPasen(jaar)) 'paasmaandag
    feestdagen(3) = DateSerial(jaar, 5, 1) 'dagVanDeArbeid
    feestdagen(4) = DateAdd("d", 50, BerekenPasen(jaar)) 'pinkstermaandag
    feestdagen(5) = DateSerial(jaar, 11, 1) 'allerheiligen
   
    ' Controleer of de datum overeenkomt met een van de feestdagen
    Dim i As Integer
   
    For i = LBound(feestdagen) To UBound(feestdagen)
        If checkDatum = feestdagen(i) Then
            IsFeestdag = True
            Exit Function
        End If
    Next i
   
    IsFeestdag = False
   
End Function

Private Function BerekenPasen(ByVal jaar As Integer) As Date

    Dim a As Integer
    Dim b As Integer
    Dim c As Integer
    Dim d As Integer
    Dim e As Integer
    Dim f As Integer
    Dim g As Integer
    Dim h As Integer
    Dim i As Integer
    Dim k As Integer
    Dim l As Integer
    Dim m As Integer
    Dim p As Integer
    Dim q As Integer
   
    'algoritme van Gauss
   
    a = jaar Mod 19
    b = jaar \ 100
    c = jaar Mod 100
    d = b \ 4
    e = b Mod 4
    f = (b + 8) \ 25
    g = (b - f + 1) \ 3
    h = (19 * a + b - d - g + 15) Mod 30
    i = c \ 4
    k = c Mod 4
    l = (32 + 2 * e + 2 * i - h - k) Mod 7
    m = (a + 11 * h + 22 * l) \ 451
    p = (h + l - 7 * m + 114) Mod 31
    q = h + l - 7 * m + 114 \ 31
   
    BerekenPasen = DateSerial(jaar, q, p + 1)
   
End Function

Public Function BerekenVolgendeKeuring(ByVal startDatum As Date, ByVal aantalJaren As Integer) As Date
   
    Dim volgendeKeuring As Date
    volgendeKeuring = DateAdd("yyyy", aantalJaren, startDatum) ' Voeg het aantal jaren toe aan de startdatum
   
    ' Controleer of de volgende keuringsdatum in het weekend of op een feestdag valt
    Do While Weekday(volgendeKeuring) = vbSaturday Or Weekday(volgendeKeuring) = vbSunday Or IsFeestdag(volgendeKeuring)
        volgendeKeuring = DateAdd("d", 1, volgendeKeuring) ' Verschuif naar de volgende dag
    Loop
   
    ' Rond de datum af naar de eerste dag van de volgende maand
    volgendeKeuring = DateSerial(Year(volgendeKeuring), Month(volgendeKeuring) + 1, 1)
   
    ' Controleer opnieuw of de volgende keuringsdatum in het weekend of op een feestdag valt
    Do While Weekday(volgendeKeuring) = vbSaturday Or Weekday(volgendeKeuring) = vbSunday Or IsFeestdag(volgendeKeuring)
        volgendeKeuring = DateAdd("d", 1, volgendeKeuring) ' Verschuif naar de volgende dag
    Loop
   
    BerekenVolgendeKeuring = volgendeKeuring
   
End Function


Je plakt bovenstaande code in een module.

In een query roep je de functie aan:
Herkeuring: Format(BerekenVolgendeKeuring([Startdatum];[JaarInterval]);"dddd dd/mm/yyyy")
Resultaat: maandag 3/01/2028

1/1/2028 valt op een zaterdag vandaar eerst volgende werkdag is dan maandag 3 januari 2028.

De feestdagen die mogelijks op de eerste dag van de maand kunnen vallen werken dynamisch dus zal zich naargelang het jaar automatisch aanpassen.

In bijlage een voorbeeldje.

Diezel
OS: Windows 10 Home - 64 bit
Processor:  Intel(R) Core(TM) I7 - 4770 CPU 3,40 GHZ
SSD - RAM: 500 GB, 16 GB
SOFTWAREPAKKET: Office 2007

Offline Riekkes

  • Lid
  • *
  • Berichten: 74
  • Oplossing.be
Re: datum afronden
« Reactie #7 Gepost op: 26 mei 2023, 15:57:30 »
Beste dizzle,
alles ingegeven en werkt goed enkel als de datum in de 12de maand valt naar de eerste van volgende maand komt er bv 1/13/25 staan en niet 1/1/26.
Lugano M Acer, Inc., SiS 760 Rev 00, Windows XP, Home, SP2, Mobile AMD Sempron(tm) Processor 2800+, 446 MB RAM, HDD:58 GB, FAT32, Norton AntiVirus, Internet Explorer 6.0, Microsoft Outlook

 


www.combell.com