Ga naar inhoud
  • 0

Vraagje voor de zaterdagmorgen


Roger

Vraag

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 naar reactie

9 antwoorden op deze vraag

Aanbevolen berichten

  • 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 naar reactie
  • 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 naar reactie
  • 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 naar reactie
  • 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 naar reactie

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.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...