Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
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é.
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.
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 / ...
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);
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;
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é.
Super et merci pour l'explication c'est plus clair pour moi maintenant !