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 :

Récupérer toutes les dates des mardis de 2014


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 145
    Points : 77
    Points
    77
    Par défaut Récupérer toutes les dates des mardis de 2014
    Bonjour tout le monde,

    J'ai un calendrier en Jquery qui propose des dates de formations pour l'année 2014. Seules les dates possibles sont cliquables. J'ai donc créer un tableau avec les dates valides en questions (tous les mardis).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var enabledDays = ["1-7-2014","1-14-2014","1-21-2014","1-28-2014"]; etc...
    J'aimerais savoir comment récupérer toutes les dates des mardis de l'année 2014 pour générer mon tableau dynamiquement ?

    Si vous avez des idées, merci d'avance

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 135
    Points : 44 923
    Points
    44 923
    Par défaut
    Bonjour,
    tu récupères le 1st mardi de l'année puis à l'objet date qui correspond tu ajoutes 7 jusqu'à ce que tu changes d'année.

  3. #3
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function getDaysInYear(year,day){
    	var d=new Date(year,0), dates=[];
    	d.setDate(d.getDate()+(7+day-d.getDay())%7);
    	while(d.getFullYear()===year){
    		dates.push(new Date(d));
    		d.setDate(d.getDate()+7);
    	}
    	return dates;	
    }
     
    console.log( getDaysInYear(2014,2) );
    ou avec la super librairie Moment.js

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function getDaysInYear(year,day){
    	var d=moment([year]).day(7+day), dates=[];
    	while(d.year()===year){
    		dates.push(new Date(+d));
    		d.add(1,'week');
    	}
    	return dates;
    }
    n'hésite pas à poser des questions si tu ne comprends pas une partie du code

  4. #4
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    137
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function getDaysInYear(y,d,t,r){
    for((t=new Date(y,r=[])).setDate(t.getDate()+(7+d-t.getDay())%7);t.getFullYear()==y;t.setDate(t.getDate()+7))r.push(new Date(t));return r
    }
    console.log( getDaysInYear(2014,2) );

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 145
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    Merci à SylvainPV et Kaamo pour vos réponses

    Oui Sylvain j'ai juste une ligne que je comprends pas trop c'est celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    d.setDate(d.getDate()+(7+day-d.getDay())%7);
    Je veux bien une explication, merci

  6. #6
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Cela permet de placer la date sur le premier mardi suivant. En JavaScript, chaque jour de la semaine est attribué à un numéro. (dimanche = 0, lundi = 1, etc, samedi = 6). Listons tous les cas possibles. Si aujourd'hui est un :
    dimanche : 2 (mardi) - 0 (dimanche) = dans 2 jours
    lundi : 2 (mardi) - 1 (lundi) = dans 1 jour
    mardi : 2 - 2 = dans 0 jour, on est bien placé
    mercredi : 2 - 3 = -1 (c'est donc dans 7 jours - 1 jour soit 6)
    jeudi : 2 - 4 = -2 (c'est donc dans 7 jours - 2 jours soit 5)
    vendredi : 2 - 5 = -3 (c'est donc dans 7 jours - 3 jours soit 4)
    samedi : 2 - 6 = -4 (c'est donc dans 7 jours - 4 jours soit 3)
    On voit donc qu'il faut ajouter 7 jours, à la différence de jour entre mardi et le jour courant.
    dimanche : 7 + 2 (mardi) - 0 = dans 9 jours (!!)
    lundi : 7 + 2 - 1 = dans 8 jours (!!)
    mardi : 7 + 2 - 2 = dans 7 jours (!!)
    mercredi : 7 + 2 - 3 = dans 6 jours
    jeudi : 7 + 2 - 4 = dans 5 jours
    vendredi : 7 + 2 - 5 = dans 4 jours
    samedi : 7 + 2 - 6 = dans 3 jours
    Il reste à traiter les cas dépassant 7, il faut donc faire appel à l'opérateur modulo (%) qui donne le reste de la division par 7
    dimanche : (7 + 2 (mardi) - 0) % 7 = 9 % 7 = 2
    lundi : (7 + 2 - 1) % 7 = 8 % 7 = 1
    mardi : (7 + 2 - 2) % 7 = 7 % 7 = 0
    mercredi : (7 + 2 - 3) % 7 = 6 % 7 = 6
    jeudi : (7 + 2 - 4) % 7 = 5 % 7 = 5
    vendredi : (7 + 2 - 5) % 7 = 4 % 7 = 4
    samedi : (7 + 2 - 6) % 7 = 3 % 7 = 3
    On a donc le nombre de jours séparant aujourd'hui du mardi suivant. Il suffit d'ajouter la date du jour d.getDate() à ce résultat pour obtenir la date du mardi suivant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    d.setDate(      // placer la date au mardi suivant
      d.getDate()   // retourne le jour courant du mois : 1 en l'occurrence (pour mercredi 1er janvier 2014)
                    // On lui ajoute la différence de jour entre le jour courant et le mardi suivant
        + (7          // nombre de jours dans une semaine (semaine suivante)
        +day          // numéro du jour de la semaine à trouver (2 pour mardi)
        -d.getDay()   // numéro du jour de la semaine courant (3 en l'occurence pour mercredi 1er janvier 2014)
        )%7           // renvoie le reste de la division par 7 si le mardi suivant n'est pas la semaine prochaine. (ex, si le résultat est 9, renvoie 2. Si le résultat est 8, renvoie 1, etc ...)
    );

  7. #7
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Pas grand chose à ajouter à l'explication très détaillée de Kaamo La technique du suite[ (index % longueur + longueur) % longueur] est un moyen relativement simple de s'assurer qu'un index se trouve bien dans une certaine partie d'une suite qui se répète. On doit ajouter la longueur car l'opérateur modulo considère les restes négatifs valables. Un autre exemple avec les mois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var MOIS = ["JANVIER","FEVRIER","MARS","AVRIL","MAI","JUIN","JUILLET","AOUT","SEPTEMBRE","OCTOBRE","NOVEMBRE","DECEMBRE"];
     
    function prochainMois(moisActuel, nombreDeMoisPlusTard){
    	var indexMoisActuel = MOIS.indexOf(moisActuel);
    	return MOIS[ (indexMoisActuel + 12 + nombreDeMoisPlusTard%12) % 12 ];
    }
     
    prochainMois("FEVRIER",3); //MAI
    prochainMois("NOVEMBRE",4); //MARS
    prochainMois("JUILLET",-13); //JUIN
    @Kaamo: vu que les codes en un tweet semblent te manquer, n'hésite pas à relancer le topic

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 145
    Points : 77
    Points
    77
    Par défaut
    Merci à vous deux, les explications sont effectivements détaillées et donc parfaites !

    Et c'est intéressant pour d'autres sujets

    Merci encore à vous !

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 135
    Points : 44 923
    Points
    44 923
    Par défaut
    Je me doutais en écrivant la méthode qu'il y avait du tweet dans l'air et cela n'a pas manqué

    Et encore merci Kaamo pour cette belle démonstration/explication

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

Discussions similaires

  1. [MySQL] Récupérer tout les noms des images après qu'il et était renommé
    Par ssTutuxX dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/08/2014, 14h07
  2. [XL-2007] Trouver toutes les dates des semaines de l'année
    Par apt dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/06/2012, 22h12
  3. Réponses: 3
    Dernier message: 07/09/2010, 21h57
  4. Récupérer toutes les pages des sous-sites
    Par Knightmare dans le forum SharePoint
    Réponses: 5
    Dernier message: 17/02/2009, 09h44
  5. [VBA] récupérer tout les noms des propriétés d'un objet
    Par ooyeah dans le forum Général VBA
    Réponses: 6
    Dernier message: 05/03/2007, 17h17

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