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

Contribuez Discussion :

Premier jour de la Semaine


Sujet :

Contribuez

  1. #1
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut Premier jour de la Semaine
    Suite à une demande sur le forum, voici un petit script qui permet de retourner le premier jour de chaque semaine en fonction du numéro de semaine et de l'année, parfois utile pour des réservations ...

    Attention ce script part de la norme de numérotation des semaines qui veut que la première semaine de l'année commence le premier lundi de l'année !


    [edit] Un membre de devloppez m'ayant fait parvenir cette info:
    ' Recommandations de l'Organisation Internationale de Standardisation
    ' Norme ISO 8601

    ' - Le lundi est considéré comme le premier jour de la semaine.
    ' - Les semaines d'une même année sont numérotées de 01 à 52
    ' (parfois 53).
    ' - La semaine qui porte le numéro 01 est celle qui contient le
    ' premier jeudi de janvier.
    ' - Il peut exister une semaine n°53 (années communes finissant
    ' un jeudi, bissextiles finissant un jeudi ou un vendredi).
    Je rectifie le code comme suit :

    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
    <script type="text/javascript">
     
    function FirstDayOfWeek(sem, an){
      var debut=new Date()
      debut.setUTCFullYear(an,0,1);
      var FirstDayOfYear= debut.getDay()
      var FirstBitLength=0
      if (FirstDayOfYear>4){
    	FirstBitLength=  8-FirstDayOfYear
    	}
     else {
      	FirstBitLength=  FirstDayOfYear-7
    	}
     
      adddays=(sem-1)*7+FirstBitLength+1
      finalDate=new Date()
      finalDate.setFullYear(an,0,adddays)
      finalDateEnd=new Date()
      finalDateEnd.setFullYear(an,0,adddays+6)
     
      return (sem==0 || sem>53)?"erreur":"debut de semaine :\t"+finalDate.toLocaleString()+"\nfin de semaine :\t" +finalDateEnd.toLocaleString();
      }
      alert(FirstDayOfWeek(7, 2009))
      </script>
    Ainsi le premier lundi de la semaine 01 de 2009 etait en fait le lundi 29 décembre 2008

    A noter qu'ici la fonction retourne un string mais on peut lui faire retourner une date
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Points : 53
    Points
    53
    Par défaut
    Bonjour!

    Tout d'abord, merci pour le script, mais j'ai un petit soucis avec!

    Ainsi le premier lundi de la semaine 01 de 2009 etait en fait le lundi 29 décembre 2008
    C'est en effet ce que je retrouve avec votre script.
    En 2010 et 2011, pour la semaine 01, je retrouve les bons résultats.

    Par contre, en 2012, il y a un problème. Même deux qui sont liés. Le jour indiqué n'est pas un lundi (mais un dimanche), et donc pas le premier jour de la semaine.

    D'ailleurs, pour les dates de la première semaine des années suivantes, on retrouve le même problème.

    La date affiché par le script : 2011-12-25
    La date que cela devrait être: 2012-01-02

    Avez vous une idée?

    Merci!

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    Bigre !
    Il semble en effet que ce script ne gère pas correctement la première semaine non complète de l'année.
    Ce coup ci je traite cette longueur de semaine de façon plus exhausive
    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
    <script type="text/javascript">
     
    function FirstDayOfWeek(sem, an){
      var debut=new Date()
      debut.setUTCFullYear(an,0,1);
      var FirstDayOfYear= debut.getDay()
      var FirstBitLength=0
      switch(FirstDayOfYear){
         case 0: FirstBitLength=FirstDayOfYear+2;
         			break;
         case 1: FirstBitLength=FirstDayOfYear;
         			break;
         case 2: FirstBitLength=FirstDayOfYear+5;
         			break;
         case 3: FirstBitLength=FirstDayOfYear+3;
         			break;
         case 4: FirstBitLength=FirstDayOfYear+1;
         			break;
         case 5: FirstBitLength=FirstDayOfYear-1;
         			break;
         case 6: FirstBitLength=FirstDayOfYear-3;
         			break;
    }			
     
      adddays=(sem-1)*7+FirstBitLength
      finalDate=new Date()
      finalDate.setUTCFullYear(an,0,adddays)
      finalDateEnd=new Date()
      finalDateEnd.setUTCFullYear(an,0,adddays+6)
     
      return (sem==0 || sem>53)?"erreur":an+" <br/>debut de semaine : "+finalDate.toLocaleString()+"<br/>fin de semaine : " +finalDateEnd.toLocaleString();
      }
     
      function init(){
      liste=""
      for(i=0;i<101;i++){
      liste+=FirstDayOfWeek(1, 2010+i)+"<br/><br/>"
      }
    	document.getElementById('res').innerHTML=liste
    	}
       </script></head>
     
    <body onload="init()">
    <div id="res"></div>
    </body>
     
    </html>
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Points : 53
    Points
    53
    Par défaut
    C'est super!

    J'ai testé plusieurs années, cela semble désormais fonctionner.

    Merci en tout cas pour l'aide!

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Points : 53
    Points
    53
    Par défaut
    Bonjour!

    J'ai encore un soucis avec le script. Il marche parfaitement en ce qui concerne les dates (tout correspond au véritable calendrier), par contre, sur certaines années, la première semaine est décalé (s2 au lieu de s1).

    Par exemple, on a pour 1991, pour la semaine 1 (s1):
    Lundi 1991-01-07 Mardi 1991-01-08 Mercredi 1991-01-09 Jeudi 1991-01-10 Vendredi 1991-01-11 Samedi 1991-01-12 Dimanche 1991-01-13
    Pour 2013
    Lundi 2013-01-07 Mardi 2013-01-08 Mercredi 2013-01-09 Jeudi 2013-01-10 Vendredi 2013-01-11 Samedi 2013-01-12 Dimanche 2013-01-13
    Lundi 2014-01-06 Mardi 2014-01-07 Mercredi 2014-01-08 Jeudi 2014-01-09 Vendredi 2014-01-10 Samedi 2014-01-11 Dimanche 2014-01-12
    Alors que pour 2012 c'est correct
    Lundi 2012-01-02 Mardi 2012-01-03 Mercredi 2012-01-04 Jeudi 2012-01-05 Vendredi 2012-01-06 Samedi 2012-01-07 Dimanche 2012-01-08
    Une solution?

    Merci!

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    vérifie ce qu'est une semaine ISO ...
    la première semaine de l'année est la première semaine complète

    Par exemple, on a pour 1991, pour la semaine 1 (s1):
    Lundi 1991-01-07

    => le premier janvier est un mardi ! la semaine n'est pas complète

    il serait inquiétant de voir un lundi 8 janvier par contre ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Points : 53
    Points
    53
    Par défaut
    D'après wikipédia (j'espère que c'est fiable)

    ISO 8601 :Cette norme ISO a défini de façon stricte une règle de numérotation, reconnue internationalement et couramment utilisée :
    -la semaine commence le lundi ;
    -les jours de chaque semaine sont numérotés de 1 (un) pour le lundi, à 7 (sept) pour le dimanche ;
    -la semaine 1 est celle qui contient le premier jeudi de l'année.
    C'est ce dernier point qui m'interpelle:

    Le 1er jeudi de Janvier 2013 tombe le 3. Donc la semaine numero 1 devrait être du 31 décembre 2012 au 6 janvier 2013 (englobant le jeudi donc), et pas du lundi 7 janvier au dimanche 13 janvier non?

    Ou alors je pige pas un truc




    Il y a aussi:

    La semaine 1 est la première à contenir la majorité de ses jours (au moins 4 jours) dans l'année. Elle contient systématiquement le 4 janvier.
    Voir

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    il suffit alors de changer le swicth de sorte à intégrer cette contrainte de 4 jours ...
    là tu modifies les + en conséquence
    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
    switch(FirstDayOfYear){
         case 0: FirstBitLength=FirstDayOfYear+2;
         			break;
         case 1: FirstBitLength=FirstDayOfYear;
         			break;
         case 2: FirstBitLength=FirstDayOfYear+5;
         			break;
         case 3: FirstBitLength=FirstDayOfYear+3;
         			break;
         case 4: FirstBitLength=FirstDayOfYear+1;
         			break;
         case 5: FirstBitLength=FirstDayOfYear-1;
         			break;
         case 6: FirstBitLength=FirstDayOfYear-3;
         			break;
    }
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Points : 53
    Points
    53
    Par défaut
    Ok, je te remercie pour ton aide.

    Voici le switch modifié:

    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
    	switch (FirstDayOfYear)
    	{
    	case 0:
    		FirstBitLength = FirstDayOfYear+2;
    		break;
    	case 1:
    		FirstBitLength = FirstDayOfYear;
    		break;
    	case 2:
    		FirstBitLength = FirstDayOfYear-2;
    		break;
    	case 3:
    		FirstBitLength = FirstDayOfYear -4;
    		break;
    	case 4:
    		FirstBitLength = FirstDayOfYear -6;
    		break;
    	case 5:
    		FirstBitLength = FirstDayOfYear -1;
    		break;
    	case 6:
    		FirstBitLength = FirstDayOfYear -3;
    		break;
    	default:
    		break;
    	}

Discussions similaires

  1. [Dates] Comment obtenir le premier jour d'une semaine ?
    Par damien.vinouze dans le forum Langage
    Réponses: 8
    Dernier message: 09/05/2007, 08h26
  2. Calendar : Récupérer le premier jour de la semaine
    Par Sinan dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/05/2007, 15h51
  3. Réponses: 7
    Dernier message: 31/07/2006, 13h50
  4. Mettre lundi comme premier jour de la semaine?
    Par catoucat dans le forum Access
    Réponses: 2
    Dernier message: 14/06/2006, 07h05
  5. Récupérez premier jour de la semaine
    Par Krapulax dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/10/2003, 17h18

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