Ga naar inhoud
  • 0

Berekenen van reeks datums


Bruno VDK

Vraag

Ik heb (naar alle waarschijnlijkheid) een custom function nodig dat het volgende weergeeft:

 

als reeks van datums, iedere dag tussen dateStart en dateEnd die valt op de 15de van de maand en de laatste dag van die maand.

 

Voorbeeld:

 

dateStart: 01-02-2014

dateEnd: 08-04-2014

 

List returned:

15-02-2014

28-02-2014

15-03-2014

31-03-2014

 

Heeft iemand iets op het schap liggen ?

Link naar reactie

3 antwoorden op deze vraag

Aanbevolen berichten

  • 0

Zoiets?

 

Functie:

DatumReeks ( theStart ; theEnd )

 

Code:

Let (
[
xStart = Max ( Date ( Month ( theStart ) ; 15 ; Year ( theStart ) ) ; theStart ) ;
xNext = If ( Day ( xStart ) = 15 ; xStart ; Date ( Month ( xStart ) + 1 ; 0 ; Year ( xStart ) ) ) 
]  ;

If ( xNext ≤ theEnd ; xNext ; "" ) & "¶" & If ( xNext > theEnd ; "" ; DatumReeks ( xNext + 1 ; theEnd ) )

)

 

rmw

Link naar reactie
  • 0

Werkt perfect, rmw, bedankt.

 

Kan dit aangepast worden met enkele aanvullende eisen?

 

Indien een gegeven veld de waarde "weekly" heeft, moeten we de dichtsbijzijnde zaterdag hebben.

Indien een gegeven veld de waarde "bi-weekly" heeft moeten we de 15 van de gegeven maand hebben, en als het al voorbij de 15de is moeten we de laatste dag van de gegeven maand hebben.

 

Alles te berekenen vanaf dateStart.

Link naar reactie
  • 0

Er vanuit gaande dat bij een wekelijkse reeks het einde van de maand niet meer van toepassing is, kan dat als volgt:

 

Functie:

DatumReeks ( theStart ; theEnd ; theFrequency )

Code:

Let (
[
xCheck = If ( theFrequency = "weekly" ; Day ( theStart + ( 7 - DayOfWeek ( theStart ) ) ) ; 15 ) ;
xStart = If ( theFrequency = "weekly" ; theStart + ( 7 - DayOfWeek ( theStart ) ) ; Max ( Date ( Month ( theStart ) ; xCheck ; Year ( theStart ) ) ; theStart ) ) ;
xNext = If ( Day ( xStart ) = xCheck ; xStart ; If ( theFrequency = "weekly" ; xStart + 7 ; Date ( Month ( xStart ) + 1 ; 0 ; Year ( xStart ) ) ) ) 
]  ;

If ( xNext ≤ theEnd ; xNext ; "" ) & "¶" & If ( xNext > theEnd ; "" ; DatumReeks ( xNext + 1 ; theEnd ; theFrequency ) )

)

Zoals je ziet wordt alleen op frequentie "weekly" gecontroleerd. Elke andere inhoud wordt per definitie als "bi-weekly" behandeld.

 

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