livio Posted October 30, 2014 Posted October 30, 2014 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 Quote
0 menno Posted October 30, 2014 Posted October 30, 2014 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 ) Quote
0 livio Posted October 30, 2014 Author Posted October 30, 2014 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 Quote
0 menno Posted October 30, 2014 Posted October 30, 2014 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 [/edit] Quote
0 SuperWimmie Posted October 31, 2014 Posted October 31, 2014 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. Quote
0 hans erik Posted November 1, 2014 Posted November 1, 2014 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. Quote
0 SuperWimmie Posted November 1, 2014 Posted November 1, 2014 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. Quote
0 menno Posted November 1, 2014 Posted November 1, 2014 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 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 Quote
Question
livio
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
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.