6 Replies Latest reply: Jun 29, 2015 9:18 AM by Jourdan Alexandre RSS

    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.

        • Re: calendrier générer
          Xavier Retaillaud

          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.

            • Re: calendrier générer

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

                • Re: calendrier générer
                  Xavier Retaillaud

                  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);

                    • Re: calendrier générer

                      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;

                        • Re: calendrier générer
                          Xavier Retaillaud

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