Voilà un petit code qui permet de calculer le numéro de la semaine pour une date donnée.
Source / Exemple :
<html><head>
<script langage="JavaScript">
document.writeln(new Date() + " --> " + getWeek ( new Date() ));
document.writeln("<BR>");
document.writeln("01/01/2005 --> " + getWeek ( new Date(2005, 0, 1) )) ;
document.writeln("<BR>");
document.writeln("01/01/2004 --> " + getWeek ( new Date(2004, 0, 1) )) ;
document.writeln("<BR>");
document.writeln("31/12/2004 --> " + getWeek ( new Date(2004, 11, 31) )) ;
document.writeln("<BR>");
document.writeln("01/01/2007 --> " + getWeek ( new Date(2007, 0, 1) )) ;
document.writeln("<BR>");
document.writeln("08/01/2007 --> " + getWeek ( new Date(2007, 0, 8) )) ;
document.writeln("<BR>");
document.writeln("10/01/2005 --> " + getWeek ( new Date(2005, 0, 10) )) ;
document.writeln("<BR>");
document.writeln("29/12/2003 --> " + getWeek ( new Date(2003, 11, 29) )) ;
function getWeek ( tDate ) {
var res = '' ;
//de l'année courante
var janv1 = new Date ( tDate.getYear(), 0, 1 ) ; //1 janvier
var dec31 = new Date ( tDate.getYear(), 11, 31 ) ; //31 decembre
var janv1Num = janv1.getDay() == 0 ? 7 : janv1.getDay() ; //numero du 1 janvier
var premSem = 7 - janv1Num > 2 ? true : false ; //si la première semaine compte ou pas
var premLundi = 9 - janv1Num ; //date du premier lundi suivant le 1 janvier
//nb jour separant la date du 1 janvier
var nbJour = parseInt((tDate - janv1) / (60 * 60 * 24 * 1000) + 1, 10) ;
//nb jour dans l'annee
var nbJourTot = parseInt((dec31 - janv1) / (60 * 60 * 24 * 1000) + 1, 10) ;
//nombre de semaines dans l'annee
var nbSem ;
if (janv1Num == 4 || (janv1Num == 3 && nbJourTot == 366)) { nbSem = 53 ; }
else { nbSem = 52 ; }
//de l'année précédente
var janv1Prev = new Date ( tDate.getYear()-1, 0, 1 ) ; //1 janvier
var dec31Prev = new Date ( tDate.getYear()-1, 11, 31 ) ; //31 decembre
var janv1NumPrev = janv1Prev.getDay() == 0 ? 7 : janv1Prev.getDay() ; //numero du 1 janvier
//nb jour dans l'annee
var nbJourTotPrev = parseInt((dec31Prev - janv1Prev) / (60 * 60 * 24 * 1000) + 1, 10) ;
//nombre de semaines dans l'annee
var nbSemPrev ;
if (janv1NumPrev == 4 || (janv1NumPrev == 3 && nbJourTotPrev == 366)) { nbSemPrev = 53 ; }
else { nbSemPrev = 52 ; }
//calcul de la semaine
var nbSemCompl = parseInt((nbJour - premLundi) / 7 , 10) ;
var week = premSem + nbSemCompl + 1 ;
if (nbJour < premLundi) {
if (premSem) {
res = '01/' + tDate.getYear() ;
}
else {
res = nbSemPrev + '/' + (tDate.getYear()-1) ;
}
}
else {
if ((week > 52) && (week > nbSem)) {
res = '01/' + (tDate.getYear()+1) ;
}
else {
var tmp = '0' + week ;
res = tmp.substring(tmp.length-2, tmp.length) + '/' + tDate.getYear() ;
}
}
return (res) ;
}
</script>
</head></html>
Conclusion :
S'il y a des bugs n'hesitez pas
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.