Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

calendrier générer

Bonjour,

Pour générer un calendrier j'ai trouvé ceci sur le forum :

/* variable date min et max pour l'interval */

Let varMinDate = Num(Today());

Let varMaxDate = Num('31/12/2030');

// generation des dates au format dd/mm/aaaa

TempCalendar:

REPLACE LOAD

Date($(varMinDate) + IterNo() - 1) as TempDate

AutoGenerate 1 While $(varMinDate) + IterNo() -1 <= $(varMaxDate);

//table avec detail date

calendar:

REPLACE LOAD

Year(TempDate) as year,

Month(TempDate) as month,

DATE(TempDate, 'DD/MM/YYYY hh:mm') as dtime

Resident TempCalendar

Order By TempDate ASC;

Il fonctionne super bien, mais j'aimerais y faire quelques petites retouches,

- J'aimerais automatisé varMaxDate , j'ai essaye let varMaxDate = Num(addMonths(Today()), 24) ou Num(addYears(Today()),2) mais sans succés.

- dans dtime j'obtiens seulement l'heure 00:00, j'aimerais donc si c'est possible au lieu du format DD/MM/YYYY  avoir DD/MM/YYYY hh:mm ou hh:mm renvoi seulement les heures 01:00 / 02:00 / ...

J'ai essayer de changer le contenu de depart des variables mais ca prend toujours une date par jours avec l'heure actuel...

Cordialement.

1 Solution

Accepted Solutions
Not applicable
Author

Let varMinDate = ((Num(now()))-(Num(Minute(Now()))));

Convient tout à fait.

De même que :

Let varMinDate = Num(now(),'0');

OU

LetvarMinDate = Floor(Now());

OU

LetvarMinDate = Num(Today());

Il s'agit en fait de transformer une date en un numéro de série, un nombre. La partie entière correspond au jour et la partie décimale à la fraction du jour (les heures, minutes et secondes). Il suffit donc de faire cette conversion de date à nombre avec Num() puis d'arrondir le résultat à l'entier inférieur d'une manière ou d'une autre.

Ce qu'il faut c'est prendre une expression qui "parle" pour assurer la maintenabilité.

View solution in original post

6 Replies
Not applicable
Author

Bonjour Alexandre

- Pour moi la formule let varMaxDate = Num(addMonths(Today(), 24)) fonctionne. Y'avait juste une parenthèse à déplacer.

- Je ne suis pas sûr d'avoir bien compris le deuxième point. Tu veux que ton calendrier soit un calendrier horaire (soit 24 lignes par journée) ?

Cordialement,

Xavier.

Not applicable
Author

Merci, de votre réponse

- ah oui la parenthèse... C'est rectifié

- Oui c'est exactement ca que je veux, 24 lignes pas jours, soit : 01/01/2015 00:00 / 01/01/2015 01:00 / ... / 01/01/2015 23:00 / ...

Not applicable
Author

Il suffierai donc de changer le pas de l'incrément, à tester en remplaçant le TempCalendar par celui là :

TempCalendar:

REPLACE LOAD

Date($(varMinDate) + IterNo()/24 - 1/24) as TempDate

AutoGenerate 1 While $(varMinDate) + IterNo()/24 -1/24 <= $(varMaxDate);

Not applicable
Author

Super tout fonctionne merci beaucoup

Pour le varMinDate je lui soustrait les minutes pour que les heures tombent pile a 00 minutes, la méthode convient ?

Voici le code pour ceux que ca intéresse :

/* *************************************************************************************** **

**                                                                                        **      

**                                      DATE GENERER                                      **

**                                                                                        **

** *************************************************************************************** */

/* variable date min et max pour l'interval */

Let varMinDate = ((Num(now()))-(Num(Minute(Now()))));

Let varMaxDate = Num(addMonths(Today(), 24));

// generation des dates au format dd/mm/aaaa hh:00

TempCalendar:

REPLACE LOAD

Date($(varMinDate) + IterNo()/24 - 1/24) as TempDate

AutoGenerate 1 While $(varMinDate) + IterNo()/24 -1/24 <= $(varMaxDate);

//table avec detail date

calendar:

REPLACE LOAD

Year(TempDate) as year,

Month(TempDate) as month,

MonthName(TempDate) as monthYear,

DATE(TempDate, 'DD/MM/YYYY hh:mm') as dtime,

DayName(TempDate) as day

Resident TempCalendar

Order By TempDate ASC;

Not applicable
Author

Let varMinDate = ((Num(now()))-(Num(Minute(Now()))));

Convient tout à fait.

De même que :

Let varMinDate = Num(now(),'0');

OU

LetvarMinDate = Floor(Now());

OU

LetvarMinDate = Num(Today());

Il s'agit en fait de transformer une date en un numéro de série, un nombre. La partie entière correspond au jour et la partie décimale à la fraction du jour (les heures, minutes et secondes). Il suffit donc de faire cette conversion de date à nombre avec Num() puis d'arrondir le résultat à l'entier inférieur d'une manière ou d'une autre.

Ce qu'il faut c'est prendre une expression qui "parle" pour assurer la maintenabilité.

Not applicable
Author

Super et merci pour l'explication c'est plus clair pour moi maintenant !