Gestion de la date par le numéro de la semaine

Résolu
EnguerrandP Messages postés 295 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 15 juillet 2015 - 27 mars 2014 à 13:42
EnguerrandP Messages postés 295 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 15 juillet 2015 - 28 mars 2014 à 11:06
Bonjour,

Je débute en HTML/Javascript/PHP.

Je souhaite pouvoir connaitre le numéro de la semaine (dans un input) actuel a l'ouverture de la page, puis qui afficher dans deux autre input la date du lundi et du vendredi.
Mais si je change dans l'input Numéro Week le numéro sa me calcule la nouvelle date du lundi et du vendredi.

Merci,Voila le js que j'ai trouver mais il ne me permet pas de faire se que je voudrait .
		/******************************************************
				NUMERO DE LA SEMAINE D'UNE DATE
		******************************************************/
		function DefSemaineNum(aaaa, mm, jj)
		{
			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
			ListeMois = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
			if (annee %4 == 0 && annee %100 !=0 || annee %400 == 0) {ListeMois[1]=29};
			var TotalJour=0;
			for(cpt=0; cpt<mm; cpt++){TotalJour+=ListeMois[cpt];}
			TotalJour+=jj;
			DebutAn = new Date(annee,0,1);
			var JourDebutAn;
			JourDebutAn=DebutAn.getDay();
			if(JourDebutAn==0){JourDebutAn=7};
			TotalJour-=8-JourDebutAn;
			NumSemaine = 1;
			NumSemaine+=Math.floor(TotalJour/7);
			if(TotalJour%7!=0){NumSemaine+=1};
			return(NumSemaine);
		}
		
		aaaa = eval(prompt('Entrez l\'annee (aaaa) :', ''));
		mm = eval(prompt('Entrez le mois (mm) :', ''))-1;
		jj = eval(prompt('Entrez le jour (jj) :', ''));
		document.write('Semaine numero : '+DefSemaineNum(aaaa, mm, jj));


6 réponses

jordane45 Messages postés 38135 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 avril 2024 344
Modifié par jordane45 le 27/03/2014 à 17:05
Bonjour,

Déjà, pour obtenir le Lundi / vendredi d'une semaine donnée.. tu peux, en Javascript utiliser par exemple :

<script type="text/javascript">
function getDateRangeOfWeek(weekNo){
    var d1 = new Date();
    numOfdaysPastSinceLastMonday = eval(d1.getDay()- 1);
    d1.setDate(d1.getDate() - numOfdaysPastSinceLastMonday);
    var weekNoToday = d1.getWeek();
    var weeksInTheFuture = eval( weekNo - weekNoToday );
    d1.setDate(d1.getDate() + eval( 7 * weeksInTheFuture ));
    var rangeIsFrom = eval(  d1.getMonth()+1) + "/" + d1.getDate() + "/" + d1.getFullYear();
    d1.setDate(d1.getDate() + 6);
    var rangeIsTo = eval(d1.getMonth()+1) +"/" + d1.getDate() + "/" + d1.getFullYear() ;
    return rangeIsFrom + " to "+rangeIsTo;
    };
 
 /**
 * Returns the week number for this date.  dowOffset is the day of week the week
 * "starts" on for your locale - it can be from 0 to 6. If dowOffset is 1 (Monday),
 * the week returned is the ISO 8601 week number.
 * @param int dowOffset
 * @return int
 */
Date.prototype.getWeek = function (dowOffset) {
/*getWeek() was developed by Nick Baicoianu at MeanFreePath: http://www.meanfreepath.com */

    dowOffset = typeof(dowOffset) == 'int' ? dowOffset : 0; //default dowOffset to zero
    var newYear = new Date(this.getFullYear(),0,1);
    var day = newYear.getDay() - dowOffset; //the day of week the year begins on
    day = (day >= 0 ? day : day + 7);
    var daynum = Math.floor((this.getTime() - newYear.getTime() - 
    (this.getTimezoneOffset()-newYear.getTimezoneOffset())*60000)/86400000) + 1;
    var weeknum;
    //if the year starts before the middle of a week
    if(day < 4) {
        weeknum = Math.floor((daynum+day-1)/7) + 1;
        if(weeknum > 52) {
            nYear = new Date(this.getFullYear() + 1,0,1);
            nday = nYear.getDay() - dowOffset;
            nday = nday >= 0 ? nday : nday + 7;
            /*if the next year starts before the middle of
              the week, it is week #1 of that year*/
            weeknum = nday < 4 ? 1 : 53;
        }
    }
    else {
        weeknum = Math.floor((daynum+day-1)/7);
    }
    return weeknum;
};
</script>


Pour tester :
function TEST(){
 var numeroSemaine = 5;
 alert(getDateRangeOfWeek(numeroSemaine));
}



Tu peux aussi (ne serait-ce que pour " l'initialisation " de tes variables au chargement de la page, utiliser le PHP pour calculer (comme tu le fais déjà pour obtenir le N° de la semaie.. le lundi/vendredi correspondant.
Pour cela :

$cY = (int)date('Y');
$cW  = (int)date("W");
$Lundi= get_date_debut_semaine($cW,$cY);
$Vendredi =  date('Y-m-d',strtotime(date("Y-m-d", strtotime($DateDeb )) . " +6 day")); 


 /**
  *------------------------------------------------- 
  * function get_date_debut_semaine
  * @param type $numSemaine
  * @param type $annee
  * @return type
  *-------------------------------------------------
  */
 function get_date_debut_semaine($numSemaine,$annee){
    $timeStampPremierJanvier = strtotime($annee . '-01-01');
    $jourPremierJanvier = date('w', $timeStampPremierJanvier);
     
    //-- recherche du N° de semaine du 1er janvier -------------------
    $numSemainePremierJanvier = date('W', $timeStampPremierJanvier);
     
    //-- nombre à ajouter en fonction du numéro précédent ------------
    $decallage = ($numSemainePremierJanvier == 1) ? $numSemaine - 1 : $numSemaine;
    //-- timestamp du jour dans la semaine recherchée ----------------
    $timeStampDate = strtotime('+' . $decallage . ' weeks', $timeStampPremierJanvier);
    //-- recherche du lundi de la semaine en fonction de la ligne précédente ---------
    $jourDebutSemaine = ($jourPremierJanvier == 1) ? date('Y-m-d', $timeStampDate) : date('Y-m-d', strtotime('last monday', $timeStampDate));
     return $jourDebutSemaine;
 }



Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
1
EnguerrandP Messages postés 295 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 15 juillet 2015 1
27 mars 2014 à 16:23
Bonjour,

Voila plus exactement le résultat que j'essaye d'obtenir:

1- Lors de l'init de la page avoir Nweek = au numéro de la semaine en cour.
2- MDay et Fday prendront la valeur de la date du Lundi et du Vendredi de la semaine NWeek.
3- Si on change la valeur de NWeek et quelle est conprise entre 1 et 52
On recalcule MDay et FDay pour qu'il corresponde au date du Lundi et du vendredi de la semaine sélectionner.
4- Si on appuis sur le boutton RFilterWeek, NWeek prend la valeur de la semeine actuel et
on recalcule MDay et FDay pour qu'il corresponde au date du Lundi et du vendredi de la semaine actuel.

avec
1

<?php echo date('W');?>


je sais récupérer le numéro de la semaine en cour mais je vois pas comment faire le reste

Pouvez-vous me venir en aide?

Merci

0
EnguerrandP Messages postés 295 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 15 juillet 2015 1
27 mars 2014 à 17:23
Merci je test tout cela
0
EnguerrandP Messages postés 295 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 15 juillet 2015 1
Modifié par EnguerrandP le 28/03/2014 à 09:35
Bonjour,
Après avoir test le premier code que tu m'a fourni et y avoir apporter quelque modification pour trouver la date souhaiter je n'arrive pas a reformater la date au format dd/mm/yyyy
je penser quand passant de :
 var rangeIsFrom = eval (d1.getMonth()+1) + "/" + d1.getDate() + "/" + d1.getFullYear();


à :

 var rangeIsFrom = eval d1.getDate() + "/" + (d1.getMonth()+1) + "/" + d1.getFullYear();


sa marcherait mais sa n'a pas était le cas.


<!-- FONCTIONEMENT SOUHAITER :
1- Lors de l'init de la page avoir Nweek = au numéro de la semaine en cour.
2- Lors de l'init MDay et Fday prendront la valeur de la date du Lundi et du Vendredi de la semaine NWeek.
3- Si on change la valeur de NWeek et quelle est conprise entre 1 et 52 
   On recalcule MDay et FDay pour qu'il corresponde au date du Lundi et du vendredi de la semaine sélectionner.
4- Si on appuis sur le boutton RFilterWeek, NWeek prend la valeur de la semeine actuel et
   on recalcule MDay et FDay pour qu'il corresponde au date du Lundi et du vendredi de la semaine actuel.
   -->


<html>
<head>
 <meta http-equiv="content-type" content="text/php; charset=ISO-8859-1" />
 <!--
 <script type="text/javascript" src="js.js" ></script>
 -->
</head>
<body> 
    <input type="button" id="buton" onClick="TEST();">
 <input type="text"  id="NWeek" name="NWeek" value = <?php echo date('W');?> size="2"></input>
 Date Monday: <input type="date" id="MDay" name="MDay" value = "" size="9"></input>
 
 Date Friday: <input type="date" id="FDay" name="FDay" value = "" size="9"></input>
 
 
<script type="text/javascript">

function getDateRangeOfWeek(weekNo)
{
    var d1 = new Date();
    numOfdaysPastSinceLastMonday = eval(d1.getDay()- 1);
    d1.setDate(d1.getDate() - numOfdaysPastSinceLastMonday);
    var weekNoToday = d1.getWeek();
    var weeksInTheFuture = eval( weekNo - weekNoToday );
    d1.setDate(d1.getDate() + eval( 5 * weeksInTheFuture ));
    var rangeIsFrom = eval (d1.getMonth()+1) + "/" + d1.getDate() + "/" + d1.getFullYear(); <!-- pourquoi sa ne marche pas avec les argument dans se sans pour avoir la date sous format dd/mm/yyy? avec eval d1.getDate() + "/" + (d1.getMonth()+1) + "/" + d1.getFullYear(); -->
    d1.setDate(d1.getDate() + 3);
    var rangeIsTo = eval (d1.getMonth()+1) +"/" + d1.getDate() + "/" + d1.getFullYear() ;
    return MDay.value = var rangeIsFrom; <!-- Méssage début (Lundi) to fin(Vendredi) de semaine à transmettre dans des inputs (MDay et FDay) sans msgbox -->
 return FDay.value = var rangeIsTo; 
 };
 
 /**
 * Returns the week number for this date.  dowOffset is the day of week the week
 * "starts" on for your locale - it can be from 0 to 6. If dowOffset is 1 (Monday),
 * the week returned is the ISO 8601 week number.
 * @param int dowOffset
 * @return int
 */
Date.prototype.getWeek = function (dowOffset) 
{
 /*getWeek() was developed by Nick Baicoianu at MeanFreePath: http://www.meanfreepath.com */

    dowOffset = typeof(dowOffset) == 'int' ? dowOffset : 0; //default dowOffset to zero
    var newYear = new Date(this.getFullYear(),0,1);
    var day = newYear.getDay() - dowOffset; //the day of week the year begins on
    day = (day >= 0 ? day : day + 7);
    var daynum = Math.floor((this.getTime() - newYear.getTime() - 
    (this.getTimezoneOffset()-newYear.getTimezoneOffset())*60000)/86400000) + 1;
    var weeknum;
    //if the year starts before the middle of a week
    if(day < 4) 
 {
        weeknum = Math.floor((daynum+day-1)/7) + 1;
        if(weeknum > 52) 
  {
            nYear = new Date(this.getFullYear() + 1,0,1);
            nday = nYear.getDay() - dowOffset;
            nday = nday >= 0 ? nday : nday + 7;
            /*if the next year starts before the middle of
              the week, it is week #1 of that year*/
            weeknum = nday < 4 ? 1 : 53;
        }
    }
    else 
 {
        weeknum = Math.floor((daynum+day-1)/7);
    }
    return weeknum;
};

function TEST()
{
 var numeroSemaine = NWeek.value; <!-- Récupére la valeur de NWeek pour déterminer le début et la fin de la semaine -->
 alert(getDateRangeOfWeek(numeroSemaine));
}

</script> 
 
</body>
</html>




Et je n'arrive pas a retourner les valuer de lundi et de vendredi dans leurs input.

Merci pour votre aide je vais test la deuxième partie.
Merci et que le café soit avec vous.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
EnguerrandP Messages postés 295 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 15 juillet 2015 1
Modifié par EnguerrandP le 28/03/2014 à 11:00
Bonjour,
Voila mon code :
<!-- FONCTIONNEMENT SOUHAITER :
1- Lors de l'init de la page avoir Nweek = au numéro de la semaine en cour.
2- Lors de l'init MDay et Fday prendront la valeur de la date du Lundi et du Vendredi de la semaine NWeek.
3- Si on change la valeur de NWeek et quelle est comprise entre 1 et 52 
   On recalcule MDay et FDay pour qu'il corresponde au date du Lundi et du vendredi de la semaine sélectionner.
4- Si on appuis sur le bouton RFilterWeek, NWeek prend la valeur de la semaine actuel et
   on recalcule MDay et FDay pour qu'il corresponde au date du Lundi et du vendredi de la semaine actuel.
   -->


<html>
<head>
 <meta http-equiv="content-type" content="text/php; charset=ISO-8859-1" />
 <!--
 <script type="text/javascript" src="js.js" ></script>
 -->
</head>
<body onload="MAJ()";> 
    <input type="button" id="buton" value="MAJ" onClick="MAJ();">
	<input type="text"  id="NWeek" name="NWeek" value = <?php echo date('W');?> size="2"></input>
	<input type="hidden"  id="Week" name="Week" value = <?php echo date('W');?> size="2"></input>
	
	Date Monday: <input type="date" id="MDay" name="MDay" size="9"></input>
	Date Friday: <input type="date" id="FDay" name="FDay"  size="9"></input>
 
	<input type="button" id="RFilterDate" name="RFilterDate" value="RESET" onClick="RESET();">
 
<script type="text/javascript">

function getDateRangeOfWeek(weekNo)
{
    var d1 = new Date();
    numOfdaysPastSinceLastMonday = eval(d1.getDay()- 1);
    d1.setDate(d1.getDate() - numOfdaysPastSinceLastMonday);
    var weekNoToday = d1.getWeek();
    var weeksInTheFuture = eval( weekNo - weekNoToday );
    d1.setDate(d1.getDate() + eval( 5 * weeksInTheFuture ));
    var rangeIsFrom = eval (d1.getMonth()+1) + "/" + d1.getDate() + "/" + d1.getFullYear(); <!--- >
    d1.setDate(d1.getDate() + 3);
    var rangeIsTo = eval (d1.getMonth()+1) +"/" + d1.getDate() + "/" + d1.getFullYear() ;
	document.getElementById("MDay").value =rangeIsFrom;
	document.getElementById("FDay").value =rangeIsTo;
 };
 
 /**
 * Returns the week number for this date.  dowOffset is the day of week the week
 * "starts" on for your locale - it can be from 0 to 6. If dowOffset is 1 (Monday),
 * the week returned is the ISO 8601 week number.
 * @param int dowOffset
 * @return int
 */
Date.prototype.getWeek = function (dowOffset) 
{
 /*getWeek() was developed by Nick Baicoianu at MeanFreePath: http://www.meanfreepath.com */

    dowOffset = typeof(dowOffset) == 'int' ? dowOffset : 0; //default dowOffset to zero
    var newYear = new Date(this.getFullYear(),0,1);
    var day = newYear.getDay() - dowOffset; //the day of week the year begins on
    day = (day >= 0 ? day : day + 7);
    var daynum = Math.floor((this.getTime() - newYear.getTime() - 
    (this.getTimezoneOffset()-newYear.getTimezoneOffset())*60000)/86400000) + 1;
    var weeknum;
    //if the year starts before the middle of a week
    if(day < 4) 
 {
        weeknum = Math.floor((daynum+day-1)/7) + 1;
        if(weeknum > 52) 
  {
            nYear = new Date(this.getFullYear() + 1,0,1);
            nday = nYear.getDay() - dowOffset;
            nday = nday >= 0 ? nday : nday + 7;
            /*if the next year starts before the middle of
              the week, it is week #1 of that year*/
            weeknum = nday < 4 ? 1 : 53;
        }
    }
    else 
 {
        weeknum = Math.floor((daynum+day-1)/7);
    }
    return weeknum;
};

function MAJ()
{
 var numeroSemaine = NWeek.value; <!-- Récupére la valeur de NWeek pour déterminer le début et la fin de la semaine -->
 getDateRangeOfWeek(numeroSemaine);
}

function RESET()
{
 document.getElementById("NWeek").value = document.getElementById("Week").value; <!-- Reset la valeur de NWeek -->
 var numeroSemaine = NWeek.value; <!-- Récupéré la valeur de NWeek pour déterminer le début et la fin de la semaine -->
 getDateRangeOfWeek(numeroSemaine);
}

</script> 
 
</body>
</html>


Ma question (mon problème actuel) : comment modifier le format de la date pour avoir dd/mm/yyyy, après plusieurs essai un fructueux je me tourne vers vous.


merci pour votre aide.
Petit point sur le programme:
I) Actuellement le code fait les action suivante :
1- Lors de l'init de la page avoir Nweek = au numéro de la semaine en cour.
2- Lors de l'init MDay et Fday prendront la valeur de la date du Lundi et du Vendredi de la semaine NWeek.
3- Si on change la valeur de NWeek et quelle est comprise entre 1 et 52
On recalcule MDay et FDay pour qu'il corresponde au date du Lundi et du vendredi de la semaine sélectionner.
4- Si on appuis sur le bouton RFilterWeek, NWeek prend la valeur de la semaine actuel et
on recalcule MDay et FDay pour qu'il corresponde au date du Lundi et du vendredi de la semaine actuel.

II) Reste a faire :
1- Mettre la date sous le format dd/mm/yyyy


Merci et que le café soit avec vous.
0
EnguerrandP Messages postés 295 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 15 juillet 2015 1
Modifié par EnguerrandP le 28/03/2014 à 11:29
Bonjour,
Voila ma solution :
<!-- FONCTIONNEMENT SOUHAITER :
1- Lors de l'init de la page avoir Nweek = au numéro de la semaine en cour.
2- Lors de l'init MDay et Fday prendront la valeur de la date du Lundi et du Vendredi de la semaine NWeek.
3- Si on change la valeur de NWeek et quelle est comprise entre 1 et 52 
   On recalcule MDay et FDay pour qu'il corresponde au date du Lundi et du vendredi de la semaine sélectionner.
4- Si on appuis sur le bouton RFilterWeek, NWeek prend la valeur de la semaine actuel et
   on recalcule MDay et FDay pour qu'il corresponde au date du Lundi et du vendredi de la semaine actuel.
   -->


<html>
<head>
 <meta http-equiv="content-type" content="text/php; charset=ISO-8859-1" />
 <!--
 <script type="text/javascript" src="js.js" ></script>
 -->
</head>
<body onload="MAJ()";> 
    <input type="button" id="buton" value="MAJ" onClick="MAJ();">
 <input type="text"  id="NWeek" name="NWeek" value = <?php echo date('W');?> size="2"></input>
 <input type="hidden"  id="Week" name="Week" value = <?php echo date('W');?> size="2"></input>
 
 Date Monday: <input type="date" id="MDay" name="MDay" size="9"></input>
 Date Friday: <input type="date" id="FDay" name="FDay"  size="9"></input>
 
 <input type="button" id="RFilterDate" name="RFilterDate" value="RESET" onClick="RESET();">
 
<script type="text/javascript">

function getDateRangeOfWeek(weekNo)
{
    var d1 = new Date();
    numOfdaysPastSinceLastMonday = eval(d1.getDay()- 1);
    d1.setDate(d1.getDate() - numOfdaysPastSinceLastMonday);
    var weekNoToday = d1.getWeek();
    var weeksInTheFuture = eval( weekNo - weekNoToday );
    d1.setDate(d1.getDate() + eval( 7 * weeksInTheFuture ));
    var rangeIsFrom = d1.getDate()+ "/" + (d1.getMonth()+1) + "/" + d1.getFullYear(); 
    d1.setDate(d1.getDate() + 4);
    var rangeIsTo = d1.getDate()+ "/" + (d1.getMonth()+1) + "/" + d1.getFullYear();
 document.getElementById("MDay").value =rangeIsFrom;
 document.getElementById("FDay").value =rangeIsTo;
 };
 
 /**
 * Returns the week number for this date.  dowOffset is the day of week the week
 * "starts" on for your locale - it can be from 0 to 6. If dowOffset is 1 (Monday),
 * the week returned is the ISO 8601 week number.
 * @param int dowOffset
 * @return int
 */
Date.prototype.getWeek = function (dowOffset) 
{
 /*getWeek() was developed by Nick Baicoianu at MeanFreePath: http://www.meanfreepath.com */

    dowOffset = typeof(dowOffset) == 'int' ? dowOffset : 0; //default dowOffset to zero
    var newYear = new Date(this.getFullYear(),0,1);
    var day = newYear.getDay() - dowOffset; //the day of week the year begins on
    day = (day >= 0 ? day : day + 7);
    var daynum = Math.floor((this.getTime() - newYear.getTime() - 
    (this.getTimezoneOffset()-newYear.getTimezoneOffset())*60000)/86400000) + 1;
    var weeknum;
    //if the year starts before the middle of a week
    if(day < 4) 
 {
        weeknum = Math.floor((daynum+day-1)/7) + 1;
        if(weeknum > 52) 
  {
            nYear = new Date(this.getFullYear() + 1,0,1);
            nday = nYear.getDay() - dowOffset;
            nday = nday >= 0 ? nday : nday + 7;
            /*if the next year starts before the middle of
              the week, it is week #1 of that year*/
            weeknum = nday < 4 ? 1 : 53;
        }
    }
    else 
 {
        weeknum = Math.floor((daynum+day-1)/7);
    }
    return weeknum;
};

function MAJ()
{
 var numeroSemaine = NWeek.value; <!-- Récupére la valeur de NWeek pour déterminer le début et la fin de la semaine -->
 getDateRangeOfWeek(numeroSemaine);
}

function RESET()
{
 document.getElementById("NWeek").value = document.getElementById("Week").value; <!-- Reset la valeur de NWeek -->
 var numeroSemaine = NWeek.value; <!-- Récupére la valeur de NWeek pour déterminer le début et la fin de la semaine -->
 getDateRangeOfWeek(numeroSemaine);
}

</script> 
 
</body>
</html>


Une dernier question pourquoi sa ne marche pas lors que je mais :
eval (d1.getMonth()+1) +"/" + d1.getDate() + "/" + d1.getFullYear()


Merci
Petit point sur le programme:
I) Actuellement le code fait les action suivante :

1- Lors de l'init de la page avoir Nweek = au numéro de la semaine en cour.

2- Lors de l'init MDay et Fday prendront la valeur de la date du Lundi et du Vendredi de la semaine NWeek sous le format dd/mm/yyyy.

3- Si on change la valeur de NWeek et quelle est comprise entre 1 et 52
On recalcule MDay et FDay pour qu'il corresponde au date du Lundi et du vendredi de la semaine sélectionner sous le format dd/mm/yyyy.

4- Si on appuis sur le bouton RFilterWeek, NWeek prend la valeur de la semaine actuel et
on recalcule MDay et FDay pour qu'il corresponde au date du Lundi et du vendredi de la semaine actuel sous le format dd/mm/yyyy.



Merci et que le café soit avec vous.
0
Rejoignez-nous