IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Gestion année N+1 dans contrôle date


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut Gestion année N+1 dans contrôle date
    Bonjour,
    J'ai ce code qui me permet de faire un calcul de date pour supprimer des options d'une liste déroulante mais j'ai un petit soucis.
    son fonctionnement :
    Je calcule la date et si la date du 15 septembre n'est pas dépassé ma condition if n'est pas remplie.
    Pour rendre automatique d'une année à l'autre j'ai utilisé l'expression getFullYear() pour figer la saison en cours; année N.
    Mon problème est que quand on passera au premier janvier suivant (N+1) cela ne fonctionnera plus.
    Comment puis je faire pour conserver cette date jusqu'au 14 septembre de l'année N+1 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    //jour et mois début de la saison
      const mois=9;
      const jour=15;
     
     
     
      var d = new Date();
      // date de fin apparition ensemble liste déroulante type compétition
      var date_fin = d.getFullYear()+','+(mois)+','+(jour);
    // conversion date
      var date_conv = Date.parse(date_fin);
      var date_maint = Date.parse(d);
     
      //Si date conv est après maintenant alors on supprime sélective et manche de coupe de France de la liste déroulante
      if (Number((date_conv)+ 8.64*Math.pow(10,7)) < date_maint)
    Merci d'avance

    Marc G.

  2. #2
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut
    Bonjour,
    Voilà ce que j'ai fait.
    Es ce que cela ne fait pas trop usine à gaz ?
    J'ai pris 1er juillet comme référence car les compétitions sont toutes terminées et les inscriptions pour la saison suivante n'ont pas commencées.
    Merci de votre avis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    //calcul d'une valeur de référence en ms entre le 1er juillet et le 1er janvier
    var date_comp1 = new Date("01/01/2020");
    var date_comp2 = new Date ("07/01/2020");
    diff_tcomp = date_comp2.getTime()- date_comp1.getTime();
     
    // Calcul des ms depuis début de l'année en cours
    var d = new Date();
    var date_an = d.getFullYear()+','+01+','+01;
     
    //conversion date en ms
    var date_conv_an = Date.parse(date_an);
    var date_maint = Date.parse(d),
    dif_tactu= date_maint - date_conv_an;
     
    // date de fin apparition ensemble liste déroulante type compétition
      var saison = d.getFullYear();
     
     
     
      if(number(diff_tcomp - dif_tactu > 0 {
    	  // j'enlève un à mon année
    	  var date_fin = (saison-1)+','+(mois)+','+(jour);
      }
      Else{
    	  // sinon je n'enlève rien
    	 var date_fin = saison+','+(mois)+','+(jour); 
      }

  3. #3
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut
    Voici mon code global. Bennn.. il marche plus.
    C'est depuis que j'ai inséré ma condition if sur les saisons. Peut être faut il procéder autrement ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    window.addEventListener("load",function(){
     
      //jour et mois début de la saison
      const mois=3;
      const jour=13;
     
      // Appel id de ma liste déroulante
     var maListe = document.getElementById('type_competition');
     
      //calcul d'une valeur de référence en ms entre le 1er juillet et le 1er janvier
    var date_comp1 = new Date("01/01/2020");
    var date_comp2 = new Date ("07/01/2020");
     
     
     
    // Calcul des ms depuis début de l'année en cours
    var d = new Date();
    var date_an = d.getFullYear()+','+01+','+01;
     
     
     
    //conversion dates en ms
    var date_conv_an = Date.parse(date_an);
    var date_maint = Date.parse(d),
     
     
    // calcul des différences
    diff_tcomp = date_comp2.getTime()- date_comp1.getTime();
    dif_tactu= date_maint - date_conv_an;
     
      // date de fin apparition ensemble liste déroulante type compétition
        var saison = d.getFullYear();
     
    	//Controle saison
    	if(number(diff_tcomp - diff_tactu) > 0) {
    	  // j'enlève un à mon année
    	  var date_fin = (saison-1)+','+(mois)+','+(jour);
      }
      Else{
    	  // sinon je n'enlève rien
    	 var date_fin = saison+','+(mois)+','+(jour); 
      }
    //conversion date de fin en ms  
    var date_conv = Date.parse(date_fin);	
     
      //Si date conv est après maintenant alors on supprime sélective et manche de coupe de France de la liste déroulante
      if (Number((date_conv)+ 8.64*Math.pow(10,7)) < date_maint){
     
      //  on supprime les champs Manche de coupe de France 3  et Sélective 2 de la liste déroulante		
         maListe.removeChild(maListe.childNodes[3]),
         maListe.removeChild(maListe.childNodes[2]);  
     
      }},false) 
     
    </script>

  4. #4
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    rien compris à ton énoncé, c'est pour quoi faire ?
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    ton manque de rigueur est ... je ne sais comment dire sans fâcher

    Petit rappel au cas où, Else n'existe pas en JavaScript qui est sensible à la casse.

    Je calcule la date et si la date du 15 septembre n'est pas dépassé ma condition if n'est pas remplie.
    Pourquoi ne pas penser plutôt « si la date est supérieure au 15/09/année alors... » ?

    Une discussion qui peut t’intéresser : Calcul d'une année de naissance non civile.

  6. #6
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut
    Je reconnais que ce n'est pas structuré. J'apprends au coup par coup, ce qui explique.
    Non suis pas fâché, je m'en doute bien un peu.
    Ok pour le Else. Je m'inspire de la littérature sur internet et tout n'est pas toujours top.
    Effectivement la discussion année non civile rend les choses plus que simples.
    Je vais revoir ma copie

  7. #7
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut
    Je vais essayé de poser des questions de base alors.

    J'ai donc bien vu la fonction de calcul de saison qui me convient bien.

    Dans mon code principal j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    window.addEventListener("load",function(){.... 
    ....},false)
    Où dois je mettre ma fonction saison ?

    Seconde question. J'ai lu que je pouvais créer une variable qui fait appel à ma fonction ?

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Où dois je mettre ma fonction saison ?
    J'aurais tendance à dire là où tu en as besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    const yearRef = getAnneeDebutSaison();
    if (mettre_ta_condition) {
      // action si VRAI
    }
    else {
      // action si FAUX
    }

  9. #9
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut
    Voici le code final et qui fonctionne et qui me permet de contrôler la disparition de certaines options de ma liste déroulante en fonction d'une date

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <script type="text/javascript">
     
    window.addEventListener("load",function(){  //fonction masquage des compétitions sélectives après le 15 septembre dans la liste déroulante
     
      //jour et mois début de la saison
      const mois=9;
      const jour=15;
     
      // Appel id de ma liste déroulante
     var maListe = document.getElementById('type_competition'); 
     
      const d = new Date();
      const y = d.getFullYear();
     
      // Calcul saison N et N+1 pour liste déroulante
     var saison = d.getMonth() < 6 ? y : (y+1);  // nota : 6 equivalent à juillet
     
      // date de fin apparition ensemble liste déroulante type compétition
      var date_fin = saison+','+(mois)+','+(jour);
     
    // conversion date
      var date_conv = Date.parse(date_fin);
      var date_maint = Date.parse(d);
     
      //Si date conv est après maintenant alors on supprime sélective et manche de coupe de France de la liste déroulante
      if (Number((date_conv)+ 8.64*Math.pow(10,7)) < date_maint){
     
      //  on supprime les champs Manche de coupe de France 3  et Sélective 2 de la liste déroulante		
         maListe.removeChild(maListe.childNodes[3]),
         maListe.removeChild(maListe.childNodes[2]);  
     
      }},false) 
     
    </script>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Vxi3] Année par défaut dans les dates
    Par schkrumble dans le forum Webi
    Réponses: 1
    Dernier message: 21/04/2011, 15h27
  2. Récuperer l'année dans une date en HQL
    Par DevServlet dans le forum Hibernate
    Réponses: 1
    Dernier message: 03/09/2009, 17h00
  3. Réponses: 3
    Dernier message: 02/05/2008, 19h51
  4. [Dates] Remplacement de mois et d'année dans la date
    Par Jerkorota dans le forum Langage
    Réponses: 7
    Dernier message: 03/09/2007, 11h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo