menno Geplaatst: 24 februari 2013 Delen Geplaatst: 24 februari 2013 (aangepast) 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] 4 maart 2013 aangepast door Gast Quote Link naar reactie
Aanbevolen berichten
Doe mee aan dit gesprek
Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.