Jump to content
  • 0

Datum berekening issue


livio

Question

Posted

Voor een intern projectje wil ik 'volgende betaaldatums' gaan berekenen, vertrekkende vanaf een bepaalde datum. (vb 31/01/2014)

Als er een maandelijkse betaling is, wil dat zeggen: datum + 1 maand, vb:

 

31/01/2014

28/02/2014

31/03/2014

30/03/2014

 

Probleem is dat ik ipv 28/02/2014 de datum 03/03/2014 terugkrijg.

 

Ik vond volgende custom functie die dit probleem zou moeten oplossen, maar die lijkt niet te werken in fmp13: http://www.fmfunctions.com/fid/334

 

Wie weet raad ?

 

thnx

 

Liviooo

7 answers to this question

Recommended Posts

  • 0
Posted

Als ik het goed begrijp wil je altijd de laatste dag van de maand berekenen? Dat kan je gemakkelijker aan de hand van een specifieke maand met de volgende formule berekenen

Date ( maand + 1 ; 0 ; jaar )

  • 0
Posted

Ja en neen ... het is nu toevallig 'betaling op de 31e', maar kan ook ergens midden in een maand vallen... Dat probleem van de 31e is dus maar af en toe. Dus het berekenen van einde maand is niet echt een oplossing

  • 0
Posted

Dan heb je nog steeds iets aan deze formule:

Je kijkt eerst of een datum + een maand nog binnen de volgende maand valt, zo ja, dan hoef je niks te doen, zo nee dan bereken je simpelweg de laatste dag van de maand. Een manier waarop je het allemaal zou kunnen doen is:

Let ( [ 
  deDatum  = Date ( Maand ; Dag ; Jaar ) ;      // Dit is de datum alleen ter illlustratie, het gaat om de losse getallen waaruit de datum bestaat
  nweDatum = Date ( Maand + 1 ; Dag ; Jaar ) ;  // de nieuwe datum, precies 1 maand later
  lstDatum = Date ( Maand + 2 ; 0 ; Jaar )      // De laatste dag van de volgende maand
] ; 
  If ( Month ( nweDatum ) = mod( Maand + 1 ; 12) ; nweDatum ; lstDatum )  // Check of de nieuwe datum werkelijk in de volgende maand valt ... 
)

[edit=23:30]Formule beetje aangepast, nu werkt ie wel :D [/edit]

  • 0
Posted

Kleine tip:

 

getasdate ( "01-" & month (get (currentdate) ) + 1 & "-" & year ( get ( currentdate ) ) ) - 1

 

oftewel, pak de eerste dag van de volgende maand en trek er één dag af. Zit je altijd op de laatste dag van de maand.

Is wel handig om de automatische betaling van 30 + 31e toch op de laatste dag van de maand te krijgen, zeker in het geval van februari.

 

't Vergt wat snapvermogen... maar best eenvoudigg eigenlijk.

  • 0
Posted
Voor een intern projectje wil ik 'volgende betaaldatums' gaan berekenen, vertrekkende vanaf een bepaalde datum. (vb 31/01/2014)

Als er een maandelijkse betaling is, wil dat zeggen: datum + 1 maand

 

Alles goed en wel, maar de formule van Menno werkt natuurlijk technisch prima.

 

18 januari + 1 maand = 18 februari, toch?

 

Maar dat is kennelijk niet altijd wat je wilt.

  • 0
Posted

Voor zover ik het begrijp:

 

31 januari + 1 maand = 28 februari.

28 februari + 1 maand = 31 maart voor dezelfde klant.

 

Terwijl:

 

28 januari + 1 maand = 28 februari.

28 februari + 1 maand = 28 maart voor dezelfde klant.

 

Daar zit hem volgens mij zijn probleem.

  • 0
Posted

Lijkt mij langzamerhand allemaal het verhaal van het misschienasappletje. Eerst vragen om hoe je een datum op de 31 altijd op door kan zetten zodat je dan altijd op de laatste van de maand uitkomt en dat kan je doen met:

 

Date ( dezemaand + 1 ; 0 ; ditjaar)

Maar dan is het antwoord:

 

Ja en neen ... het is nu toevallig 'betaling op de 31e', maar kan ook ergens midden in een maand vallen... Dat probleem van de 31e is dus maar af en toe. Dus het berekenen van einde maand is niet echt een oplossing

Dat kan je doen (maar dat hoeft uiterraard niet!) met de andere calculatie die ik gaf. Als echter ook dat nog arbitrair is, dan is er vast ook nog wel een wens te vinden dat wanneer je start op de 30 van de maand te wensen, dat er wanneer het kan de 30 wordt gekozen en en anders de 28e of de 29e. Het uitgangspunt is dan alleen niet meer dat gebaseerd op de huidige/laatste datum van de maand + 1 maand, maar dat de 30e van de maand de voorkeur heeft. Je moet wél je probleem en/of wens duidelijk formuleren, dan is het namelijk ook gemakkelijk om een mogelijke oplossing te bedenken :evil:

 

Let ( [ 
  deDatum  = Date ( Maand ; Dag ; Jaar ) ;          // Dit is de datum alleen ter illlustratie, het gaat om de losse getallen waaruit de datum bestaat
  wensDag  = 30 ;                                   // ipv van de waarde Dag te gebruiken die vanzelf (ooit) verlaagt naar 28, stel je een vaste dag in. De rest wijzigt niet
  nweDatum = Date ( Maand + 1 ; wensDag ; Jaar ) ;  // de nieuwe datum, precies 1 maand later
  lstDatum = Date ( Maand + 2 ; 0 ; Jaar )          // De laatste dag van de volgende maand
] ; 
  If ( Month ( nweDatum ) = mod( Maand + 1 ; 12) ; nweDatum ; lstDatum )  // Check of de nieuwe datum werkelijk in de volgende maand valt ... 
)

 

Het kan nog gekker: je wilt bijvoorbeeld altijd op de 4e donderdag van de maand factureren. Ik heb anderhalf jaar geleden een functie bij de tips en de truuks gepost; WeekFiscalToDate - Bereken datum met jaar en iso-weeknr en die kan je gebruiken om precies dat te doen:

 

Let( [ 
  deDatum  = Date ( Maand ; Dag ; Jaar ) ;          // Dit is de datum alleen ter illlustratie, het gaat om de losse getallen waaruit de datum bestaat
  incidentie = 4 ;                                  // 4e keer in de maand 
  dagVanWeek = 5                                    // Dag 5 is donderdag
] ; 
  WeekFiscalToDate ( Jaar ; WeekofYearFiscal ( Date ( Maand ; 7 * incidentie ; Jaar ) ; dagVanWeek ) ; dagVanWeek )  // Haal de functie even van de andere thread op
)

 

Geinig toch? Beetje klungelen met kalenderdata :D

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...