Jump to content
  • 0

Vraagje voor de zaterdagmorgen


Roger

Question

Beste FileMaker bollebozen,

 

Even een puzzeltje voor de zaterdagmorgen:

 

In een database bevatten de records o.a. twee velden waarvan de ene de maand (tekstveld) en de andere het jaar (getalveld) aanduidt. Ik wil nu graag van elke maand weten op welke datum de derde dinsdag valt.

 

De vraag is, hoe doen we dat?

 

Met vriendelijke groeten,

Roger van Dongen

Link to comment

9 answers to this question

Recommended Posts

  • 0

Let ( [ m = If ( IsEmpty ( Maand ) or Maand < 1 or Maand > 12 ; 
                 Month ( Get ( CurrentDate ) ) ; Maand ) ;
          y = If ( IsEmpty ( Jaar ) ; Year ( Get ( CurrentDate ) ) ; Jaar ) ] ;
 Date ( m ; Mod ( 2 - DayOfWeek ( Date ( m ; 1 ; y ) ) + 7 ; 7 ) + 16 ; y )
)

 

Ik heb hiervoor een functie aangepast die ontwikkeld werd door Theo Ros. We vertrekken hier van een numerieke waarde voor de maand.

Link to comment
  • 0

Dat ziet er mooier uit dan mijn oplossing (heb zelf ook nagedacht namelijk) :

 

If ( DayName ( Date ( maand_getal ; 15 ; expiratie_jaar ) ) = "vrijdag" ; Date ( maand_getal ; 15 ; expiratie_jaar ) ;

If ( DayName ( Date ( maand_getal ; 16 ; expiratie_jaar ) ) = "vrijdag" ; Date ( maand_getal ; 16 ; expiratie_jaar ) ;

If ( DayName ( Date ( maand_getal ; 17 ; expiratie_jaar ) ) = "vrijdag" ; Date ( maand_getal ; 17 ; expiratie_jaar ) ;

If ( DayName ( Date ( maand_getal ; 18 ; expiratie_jaar ) ) = "vrijdag" ; Date ( maand_getal ; 18 ; expiratie_jaar ) ;

If ( DayName ( Date ( maand_getal ; 19 ; expiratie_jaar ) ) = "vrijdag" ; Date ( maand_getal ; 19 ; expiratie_jaar ) ;

If ( DayName ( Date ( maand_getal ; 20 ; expiratie_jaar ) ) = "vrijdag" ; Date ( maand_getal ; 20 ; expiratie_jaar ) ;

If ( DayName ( Date ( maand_getal ; 21 ; expiratie_jaar ) ) = "vrijdag" ; Date ( maand_getal ; 21 ; expiratie_jaar ))))))))

Link to comment
  • 0

Ik heb de vraag voor de grap vandaag even aan de groep gegeven, met dit verschil dat het voor gelijk welke dag, maand en jaar moest zijn.

(het is de groep die nog in FM 6 zit, dus hier en daar zal een functie misschien een andere naam hebben)

 

Ze kwamen op het volgende (het geheel kan in 1 monster Let() berekening, maar voor de duidelijkheid doen we het hier even afzonderlijk):

 

day = text – valuelist :

Sunday

Monday

Tuesday

Wednesday

Thursday

Friday

Saturday

 

month = text – valuelist :

January

February

March

April

May

June

July

August

September

October

November

December

 

occurrence = text - valuelist

1st

2nd

3rd

4th

5th

 

year = number

 

We converteren de dayText naar number

dayConverted_cn =

Case(day = "Sunday"; 6; 
        day = "Monday"; 5;
        day = "Tuesday"; 4;
        day = "Wednesday"; 3;
        day = "Thursday"; 2;
        day = "Friday"; 1;
        day = "Saturday"; 0)

 

We converteren de monthText naar number

monthConverted_cn=

Case(month = "January"; 1;
        month = "February"; 2;
        month = "March"; 3;
        month = "April"; 4;
        month = "May"; 5;
        month = "June"; 6;
        month = "July"; 7;
        month = "August"; 8;
        month = "September"; 9;
        month = "October"; 10;
        month = "November"; 11;
        month = "December"; 12)

 

We converteren de occurrence naar number

occurenceConverted_cn =

((GetAsNumber(occurrence) - 1) * 7) + 1

 

We gooien alles in een finale berekening:

nthOccurrenceDate_cd =

Date(monthConverted_cn; occurenceConverted_cn; year) + 
Mod(7 - (-1 * (Mod(-1 * (DayOfWeek(Date(monthConverted_cn; 1; Year))  + dayConverted_cn ); 7))); 7)

 

 

Nu krijg je voor iedere nthDay van iedere nthMonth in ieder nthYear de datum.

 

De volgende stap is het geheel in een CF gieten.

 

Van de nthOccurrenceDate_cd kun je nog een 'display' berekening maken dat 'Invalid' geeft indien de vraag een 'onmogelijke datum' is, zoals b.v. de niet bestaande 5de woensdag van een maand.

 

Dat zou dan iets kunnen zijn als:

zi_dateDisplay_ct =

 

If(Month(nthOccurrenceDate_cd ) <> GetAsNumber(monthConverted_cn); "Invalid"; GetAsText(nthOccurrenceDate_cd ))

Link to comment
  • 0

En deze is zelfs zo aardig dat als je de 12e dinsdag van december 2007 opvraagt hij netjes 19-2-2008 teruggeeft ;-)

 

Let ( 
[
xDagNr = DayofWeek ( Date ( maand ; 1 ; jaar ) )
] ; 

Date ( 
maand ;
1 + dag - xDagNr + If ( xDagNr > dag ; 7 ; 0 ) + ( ( voorkomen - 1 ) * 7 ) ;
jaar
)

)

 

waarbij 'maand' , 'jaar', 'dag' en 'voorkomen' getalvelden zijn en deze berekening in een datum resulteert.

Dus: maand=12, jaar=2007, dag=3 (dinsdag) en voorkomen=12

 

rmw

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