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 :

Calcul numéro semaine


Sujet :

JavaScript

  1. #1
    Membre expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 165
    Points : 3 707
    Points
    3 707
    Par défaut Calcul numéro semaine
    Bonjour,

    J'ai trouvé un script pour calculer le numéro de semaine à partir d'une date. Cependant, en aportant des modifications, je ne comprends pas pourquoi le script déconne. on me revoie dans un alert toujours des trucs bizarre comme pour la date d'aujourd'hui au format 04/02/2008 la semaine 444 .

    Voici le code :
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <html><title>Test Date</title><head>
    <script type="text/javascript">
    function test(){
    	var uneDate=document.getElementById('test').value;
    	var elem = uneDate.split('/');
    	jj = elem[0];
    	mm = elem[1]-1;
    	aaaa = elem[2];
    	var date_liv = DefSemaineNum(aaaa, mm, jj);
    	alert(date_liv);
    }
    /******************************************************
    FONCTION QUI DETERMINE LE NUMERO DE LA SEMAINE EN COURS
    ******************************************************/
    function DefSemaineNum(aaaa, mm, jj)
    {
    //initialisation des variables
    //----------------------------
    	var MaDate  = new Date(aaaa,mm,jj);//date a traiter
    	var annee = MaDate.getFullYear();//année de la date à traiter
    	var NumSemaine = 0,//numéro de la semaine
     
    	// calcul du nombre de jours écoulés entre le 1er janvier et la date à traiter.
    	// ----------------------------------------------------------------------------
    	// initialisation d'un tableau avec le nombre de jours pour chaque mois
    	ListeMois = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    	// si l'année est bissextile alors le mois de février vaut 29 jours
    	if (annee %4 == 0 && annee %100 !=0 || annee %400 == 0) {ListeMois[1]=29};
    	// on parcours tous les mois précédants le mois à traiter 
    	// et on calcul le nombre de jour écoulé depuis le 1er janvier dans TotalJour
    	var TotalJour=0;
    	for(cpt=0; cpt<mm; cpt++){TotalJour+=ListeMois[cpt];}
    	TotalJour+=jj;
     
    	//Calcul du nombre de jours de la première semaine de l'année à retrancher de TotalJour
    	//-------------------------------------------------------------------------------------
    	//on initialise dans DebutAn le 1er janvier de l'année à traiter
    	DebutAn = new Date(annee,0,1);
    	//on determine ensuite le jour correspondant au 1er janvier
    	//de 1 pour un lundi à 7 pour un dimanche/
    	var JourDebutAn;
    	JourDebutAn=DebutAn.getDay();
    	if(JourDebutAn==0){JourDebutAn=7};
     
    	//Calcul du numéro de semaine
    	//----------------------------------------------------------------------
    	//on retire du TotalJour le nombre de jours que dure la première semaine 
    	TotalJour-=8-JourDebutAn;
    	//on comptabilise cette première semaine
    	NumSemaine = 1;
    	//on ajoute le nombre de semaine compléte (sans tenir compte des jours restants)
    	NumSemaine+=Math.floor(TotalJour/7);
    	// s'il y a un reste alors le n° de semaine est incrémenté de 1
    	if(TotalJour%7!=0){NumSemaine+=1};
    	return(NumSemaine);
     
    }
    </script>
    </head>
    <body>
    <input type="text" id="test"><input type="button" id="buton" onClick="test();">
    <script type="text/javascript">
    /*aaaa = eval(prompt('Entrez l\'année (aaaa) :', ''));
    mm = eval(prompt('Entrez le mois (mm) :', ''))-1;
    jj = eval(prompt('Entrez le jour (jj) :', ''));
    document.write('Semaine numero : '+DefSemaineNum(aaaa, mm, jj));*/
    </script>
    </body>
    </html>

  2. #2
    Membre averti Avatar de Bezout
    Profil pro
    Développement
    Inscrit en
    Septembre 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Septembre 2003
    Messages : 234
    Points : 305
    Points
    305
    Par défaut


    Moi j'utilise ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	// Retourne la numéro de la semaine courante
    	function getWeekNumber() {
    		var d = new Date();
    		var DoW = d.getDay();
    		d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu
    		var ms = d.valueOf(); // GMT
    		d.setMonth(0);
    		d.setDate(4); // Thu in Week 1
    		return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;
    	}
    que tu peux adapter pour ton besoin en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	// Retourne la numéro de la semaine
    	function getWeekNumber(uneDate) {
    		var d = new Date(uneDate);
    		var DoW = d.getDay();
    		d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu
    		var ms = d.valueOf(); // GMT
    		d.setMonth(0);
    		d.setDate(4); // Thu in Week 1
    		return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;
    	}

  3. #3
    Membre averti Avatar de Bezout
    Profil pro
    Développement
    Inscrit en
    Septembre 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Septembre 2003
    Messages : 234
    Points : 305
    Points
    305
    Par défaut
    Par contre désolé mais je viens de me rendre compte qu'il bug avec les années bisextilles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // OK
    	alert(getWeekNumber(new Date(2007, 11, 28)));
    	alert(getWeekNumber(new Date(2007, 11, 29)));
    	alert(getWeekNumber(new Date(2008, 11, 28)));
    // KO
    	alert(getWeekNumber(new Date(2008, 11, 29))); // Retourne 1
    Le script (que tu utilises) fonctionne car il retourne 53

  4. #4
    Membre expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 165
    Points : 3 707
    Points
    3 707
    Par défaut
    Merci de m'avoir répondu, mais j'aimerai savoir la date que tu passes en paramètre, elle est au format dd/mm/yyyy ?

    Moi j'ai essayé ce code mais ça ne semble pas fonctioner le 01/01/2008 me renvoie bien la semaine 1 mais après par exemple le 02/01/2008 me renvoie la semaine 5 .

    Pourtant ej n'ai fait que copier ton code et l'appeller via une fonction de test.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function dateTest(){
    	var D = document.getElementById('test').value;
    	var date_livraison = getWeekNumber(D);
    	alert(date_livraison);
    }
    function getWeekNumber(uneDate) {
    		var d = new Date(uneDate);
    		var DoW = d.getDay();
    		d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu
    		var ms = d.valueOf(); // GMT
    		d.setMonth(0);
    		d.setDate(4); // Thu in Week 1
    		return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;
    	}
    Et le code HTML pour tester n'a pas changé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" id="test"><input type="button" id="buton" onClick="dateTest();">

  5. #5
    Membre averti Avatar de Bezout
    Profil pro
    Développement
    Inscrit en
    Septembre 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Septembre 2003
    Messages : 234
    Points : 305
    Points
    305
    Par défaut
    Non il faut convertir la chaine "02/01/2008" en un objet de type Date

  6. #6
    Membre expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 165
    Points : 3 707
    Points
    3 707
    Par défaut
    Citation Envoyé par Bezout Voir le message
    Par contre désolé mais je viens de me rendre compte qu'il bug avec les années bisextilles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // OK
    	alert(getWeekNumber(new Date(2007, 11, 28)));
    	alert(getWeekNumber(new Date(2007, 11, 29)));
    	alert(getWeekNumber(new Date(2008, 11, 28)));
    // KO
    	alert(getWeekNumber(new Date(2008, 11, 29))); // Retourne 1
    Le script (que tu utilises) fonctionne car il retourne 53

    ah bon ? Cette année est une année bisextile et avec le script, il renvoie bien la semaine 9. Bizarre.

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

Discussions similaires

  1. Résultat du Calcul numéro de semaine erroné
    Par jerem7w dans le forum SQL
    Réponses: 2
    Dernier message: 07/09/2010, 14h38
  2. [MySQL] Calcul numéro de semaine en fonction d'une date
    Par Devilju69 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/06/2009, 21h11
  3. mysql numéro semaine
    Par mathieu3392 dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/04/2008, 12h30
  4. Réponses: 4
    Dernier message: 09/10/2007, 15h09
  5. [Dates] numéro année + numéro semaine
    Par auduma dans le forum Langage
    Réponses: 3
    Dernier message: 10/01/2006, 12h58

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