Jump to content
  • 0

Vraagje voor de zaterdagmorgen


Roger

Question

Posted

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

9 answers to this question

Recommended Posts

  • 0
Posted

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.

  • 0
Posted

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

  • 0
Posted

Deze rekent beter dan de vorige:

 

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 ) ) + 8 ; 7 ) + 15 ; y )
)

  • 0
Posted

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

  • 0
Posted

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

  • 0
Posted

De onze doet dat ook, daarom de eerste beperking via Popup Menu valuelists.

Dan kun je moeilijk 'rare' zaken opvragen.

En met de Popup Menu kun je geen andere waarden ingeven zoals bij een simpel Popup List. :lol:

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