Jump to content

WeekFiscalToDate - Bereken datum met jaar en iso-weeknr


menno

Recommended Posts

Filemaker is een amerikaans programma en dat is onder andere te merken aan wijze waarop met kalenderdata wordt omgegaan. In de functie WeekOfYear() is 1 januari altijd week 1 en dan is het heel gemakkelijk om aan de hand van een weeknummer de datum uit te rekenen.

 

Wij gebruiken echter in europa de iso-methode voor onze weekberekening en daarbij geldt dat wanneer 1 januari valt op maandag t/m donderdag, 1 januari in week 1 valt en anders in de laatste week van het voorgaande kalenderjaar. De functie die wij daarvoor kunnen toepassen is WeekOfYearFiscal ( datum ; 1edagvandeweek ). Dat wordt dan in de praktijk voor onze kalenders: WeekOfYearFiscal ( datum ; 2 ).

 

Het uitrekenen van de datum aan de hand van het weeknummer en het jaar wordt dan al iets lastiger. Ik kon op internet wel een aantal formules vinden die van een vaste begindag (maandag) uitgaan en dan keurig de datum uitrekenden, maar geen enkele die uitging van een specifiek opgegeven dag. Dus ik heb wat zitten knutselen en op ben de onderstaande formule uitgekomen.

 

De formule hieronder is als Custom Function geschreven, maar hij is niet recursief en daarom kan je hem ook gewoon in je velddefinities toepassen als je geen Filemaker Advanced hebt. Hij is toepasbaar in alle versies vanaf FMP7.

 

//    ########################################################################################
//    ##    WeekFiscalToDate function
//    ##    Author:
//    ##    Menno van Beek - STB Automatisering & Advies BV - Houten, the Netherlands
//    ##    
//    ##    Format:   
//    ##    WeekFiscalToDate ( Yearnr ; WeeknrOfYear ; Firstweekday )
//    ##    
//    ##    Parameters:
//    ##    Yearnr          =    between 1 and 4000 
//    ##    WeeknrOfYear    =    any natural number, limited only by the resulting date
//    ##    Firstweekday    =    1…7 (sunday…saturday)
//    ##    
//    ##    Data type returned:
//    ##    Date calculated from the given fiscal weeknumber in the given year at the given Firstweekday
//    ##    
//    ##    Description:   
//    ##    This function works more or less as the inverse function of WeekOfYearFiscal(), which
//    ##    is built into Filemaker. Only instead of calculating the weeknumber, it calculated the date
//    ##    for the given day of the given weeknr.
//    ##    
//    ##    Other use:
//    ##    You can also use this function to calculate a particular occurrence of a day in a given month:
//    ##    WeekFiscalToDate ( Year ; 
//    ##                       WeekOfYearFiscal ( Date ( Month ; 7 * occurrence ; Year ) ; Firstweekday ) ; 
//    ##                       Firstweekday )
//    ##    
//    ##    February 24, 2013
//    ########################################################################################

Let( 
[ 
Dd1Yr = Date ( 1 ; 1 ; Yearnr ) ;                                   // january 1st
Dy1Wk1 = DayOfWeek ( Dd1Yr - Firstweekday ) ;                       // 1st day of week of january 1st
WeekOfYear1 = WeekOfYearFiscal ( Dd1Yr ; Firstweekday ) ;           // weeknr of january 1st
Dd1Wk1 = Dd1Yr - Dy1Wk1 + If ( WeekOfYear1 > 1 or Dy1Wk1 = 7 ; 7 )  // date of 1st day of weeknr 1 of year
] ; 
Dd1Wk1 + ( WeeknrOfYear - 1 ) * 7 )                                 // the result as date

 

Je kan behalve dat je de datum van een gegeven week kan uitrekenen, ook aan de hand van de incidentie van een dag uitrekenen welke datum daar bij hoort met behulp van WeekOfYearFiscal. De formule die je dan gebruikt (gebruik makend van de CF) wordt dan:

WeekFiscalToDate ( Year ; 
                  WeekofYearFiscal ( Date ( Month ; 7 * incidentie ; Year ) ; Firstweekday ) ; 
                  Firstweekday )

Bijvoorbeeld met prinjesdag ... de derde dinsdag van september voor 2013 wordt dan:

WeekFiscalToDate ( 2013 ; WeekofYearFiscal ( Date ( 9 ; 7 * 3 ; 2013 ) ; 3 ) ; 3 ) = 17-9-2013

voor 2014: 16-9-2014

voor 2015: 15-9-2015

voor 2016: 20-9-2016

 

[edit 4-3-2013]code 2e formule gecorrigeerd[/edit]

Edited by Guest
Link to comment

Join the conversation

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

Guest
Reply to this topic...

×   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...