menno Posted February 24, 2013 Posted February 24, 2013 (edited) 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 March 4, 2013 by Guest Quote
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.