Calcolare il numero di Lunedi

E' l'area in cui è possibile condividere funzioni personalizzate nate dalla creatività e l'esperienza degli sviluppatori FileMaker

Moderatore: Moderatori

Rispondi
ilmaurino
Messaggi: 3
Iscritto il: giovedì 21 novembre 2013, 9:19

Calcolare il numero di Lunedi

Messaggio da ilmaurino » giovedì 21 novembre 2013, 9:22

Salve a tutti
qualcuno sa aiutarmi??'
Dovrei calcolare il numero di lunedì che ci sono fra due date... come faccio??

raybaudi
Messaggi: 3616
Iscritto il: sabato 7 febbraio 2004, 1:00
Località: Roma
Contatta:

Re: Calcolare il numero di Lunedi

Messaggio da raybaudi » venerdì 22 novembre 2013, 10:07

Questa funzione crea una lista di tutti i lunedì fra due date, compresi eventuali lunedì delle due date.
( cioè tra il 04/11/2013 e il 25/11/2013 restituisce una lista di 4 lunedì )
Per poi calcolarne il numero ti basterà: ValueCount ( Mondays ( StartDate ; EndDate ) )

Codice: Seleziona tutto

/*
Mondays ( StartDate ; EndDate ) Custom Function
*/
Case(
StartDate and EndDate and StartDate ≤ EndDate ;
List ( If ( DayOfWeek ( StartDate ) = 2 ; StartDate ); Mondays ( StartDate + 1 ; EndDate ) ) 
)
Raybaudi FMP 12 Adv. Windows XP SP3

ilmaurino
Messaggi: 3
Iscritto il: giovedì 21 novembre 2013, 9:19

Re: Calcolare il numero di Lunedi

Messaggio da ilmaurino » venerdì 22 novembre 2013, 12:03

grazie
la provo subito

ilmaurino
Messaggi: 3
Iscritto il: giovedì 21 novembre 2013, 9:19

Re: Calcolare il numero di Lunedi

Messaggio da ilmaurino » venerdì 22 novembre 2013, 18:51

Ho provato e funziona
ma se uso come data finale date successive al 2041 non funziona

raybaudi
Messaggi: 3616
Iscritto il: sabato 7 febbraio 2004, 1:00
Località: Roma
Contatta:

Re: Calcolare il numero di Lunedi

Messaggio da raybaudi » sabato 23 novembre 2013, 14:28

Le funzioni ricorsive ( e questa lo è ) hanno un numero di ricorsioni limitato.

Nota che dal 23/11/2013 al 23/11/2040 ci sono la bellezza di 1409 lunedì e FileMaker deve tenere in memoria la bellezza di 15498 caratteri della lista ( questa funzione lo può fare ma solo per 10.000 ricorsioni )

Se hai la necessità di trovare il numero di lunedì fra due date che differiscono per più di 27 anni, puoi provare quest'altra che funziona fino a 136.

Codice: Seleziona tutto

/*
MondaysNumber ( StartDate ; EndDate ; CountValues ) Custom Function tail recursive
*/
Case(
StartDate and EndDate and StartDate ≤ EndDate ;
MondaysNumber ( StartDate + 1 ; EndDate ; CountValues + ( DayOfWeek ( StartDate ) = 2 ) ) ;
CountValues
)
Se poi le necessità sono ancora maggiori, si dovrà usare un looping script.
Tieni però presente che, per questo tipo di calcolo, spesso ( e questo è un caso ) si può usare un semplice campo calcolato come questo:

Codice: Seleziona tutto

Let(
newDate = EndDate - Choose ( DayOfWeek ( EndDate ) - 1 ; 6 ; 0 ; 1 ; 2 ; 3 ; 4 ; 5 ) ;
If ( StartDate and EndDate and EndDate ≥ StartDate ; Div ( newDate - StartDate ; 7 ) + 1 )
)
Raybaudi FMP 12 Adv. Windows XP SP3

Rispondi