Les Snippets

Connexion

Calculer le numero de semaine d'une date

Niveau requis pour utiliser/comprendre cette source : 2 ( Initié )
Créé le 14/05/2006 18:00:58 et initié par dthouvenin [Liste]
Date de mise à jour : 29/12/2007 08:44:58
Vue : 22787
Catégorie(s) : Base de données, Date & Heure, Algorithme
Langages dispo pour ce code :
- SQL, SQL 2005
- Delphi 5
- C
- PHP 3, PHP 4, PHP 5
- Windev
- Delphi 5
- VB6, VBA
- VB6, VBA
- VB 2005
- Python



Langage : SQL , SQL 2005
Date ajout : 14/05/2006
Posté par dthouvenin [Liste]
create function PremierJourApres(@UneDate datetime, @QuelJour integer) returns datetime
as
begin
  return DateAdd(day, 6-((DatePart(dw, @UneDate)+6-@QuelJour) % 7), @UneDate)
end
create function NumeroSemaine(@UneDate datetime) returns integer
as
begin
  declare @PremierJeudi datetime, @DebutSemaine1 datetime
  declare @TheDate datetime, @StartOfYear datetime
  set @TheDate = convert(datetime, convert(varchar, @UneDate, 103), 103)
  set @StartOfYear = DateAdd(day, 1-DatePart(dy, @TheDate), @TheDate)
  set @PremierJeudi = dbo.PremierJourApres(@StartOfYear, 4)
  set @DebutSemaine1 = DateAdd(day, -4, @PremierJeudi)
  return 1+(DateDiff(day, @DebutSemaine1, @UneDate) / 7)
end

Remarque :
La semaine 1 est celle du premier jeudi de l'année !
En bonus : fonction PremierJourApres qui permet de calculer le premier jeudi après le 1er janvier.
Langage : Delphi 5
Date ajout : 22/05/2006
Posté par dthouvenin [Liste]

function PremierJourApres(UneDate : TDateTime; QuelJour: Integer): TDateTime;
begin
  Result := IncDay(UneDate, 6-((DayOfTheWeek(UneDate)+6-QuelJour) mod 7));
end;

function NumeroSemaine(UneDate : TDateTime): Integer;
var
  PremierJeudi, DebutSemaine1: TDatetime;
begin
  UneDate := DateOf(UneDate);
  PremierJeudi := PremierJourApres(StartOfTheYear(UneDate), 4);
  DebutSemaine1 := IncDay(PremierJeudi, -4);
  Result := 1+(DaysBetween(DebutSemaine1, UneDate) div 7);
end;


Remarque :
Rappel: Le 1er Janvier de l'année N peut être en semaine 53 de l'année N-1, par exemple s'il tombe un samedi
Langage : C
Date ajout : 24/05/2006
Posté par magma [Liste]

//____________________________________________________________________
//
// Retourne le numero de semaine [1 ... 53], 0 si erreur
//____________________________________________________________________
//
int Semaine(int j, int m, int a)
{
  int s = 0;
  struct tm tmj = {0, 0, 12, 1, 0, a - 1900};
  struct tm tmq = {0, 0, 12, j, m - 1, a - 1900};
      
  if(mktime(&tmj) != (time_t)-1 && mktime(&tmq) != (time_t)-1)
  { 
    if(!(s = (tmj.tm_wday + tmq.tm_yday + 6) / 7 - (tmj.tm_wday / 5))) 
      s = Semaine(31, 12, a - 1);
    
    if(m == 12)
    {
      int js = (tmj.tm_wday + tmq.tm_yday) % 7;
      if((js == 1 && (j >= 29 && j <= 31)) ||  
         (js == 2 && (j == 30 || j == 31)) ||  
         (js == 3 &&  j == 31)) s = 1;                        
    }
  }  
  return s;
}

Langage : PHP 3 , PHP 4 , PHP 5
Date ajout : 26/05/2006
Posté par malalam [Liste]
DateMAJ : 26/05/2006
<?php
function NumeroSemaine ($sDate) { // date au format jj/mm/aaaa ou jj-mm-aaaa par exemple
         $sEngDate = substr ($sDate, -4).substr ($sDate, 3, 2).substr ($sDate, 0, 2);
         $iTime = strtotime ($sEngDate);
         return date ('W', $iTime);      
}
function PremierJourApres ($sDate, $iDay) { // iDay : 1 = lundi, 7 = dimanche - sDate = une date format jj/mm/aaaa par exemple
         $sEngDate = substr ($sDate, -4).substr ($sDate, 3, 2).substr ($sDate, 0, 2);
         $iTime = strtotime ($sEngDate);
         $iCur = date ('N', $iTime);
         $iNext = 6 - (($iCur + 6 - $iDay) % 7);
         $iNewTime = $iTime + ($iNext * 86400);
         return strftime ('%d/%m/%Y', $iNewTime);
}
$sDate = '26/05/2006';
echo NumeroSemaine ($sDate);
echo '<br />';
echo PremierJourApres ($sDate, 4);
?>

Langage : Windev
Date ajout : 15/06/2006
Posté par fabienlaps [Liste]
Numero est un entier = NuméroDeSemaine(Date)

Langage : Delphi 5
Date ajout : 05/08/2006
Posté par f0xi [Liste]
uses DateUtils;
function WeekOf(const AValue : TDateTime):Word;
function WeekOfTheYear(const AValue : TDateTime):Word;
function WeekOfTheYear(const AValue : TDateTime; var AYear : Word ):Word;


Langage : VB6 , VBA
Date ajout : 20/10/2006
Posté par mortalino [Liste]
Function WeekNumber(Optional ByVal vDate As Variant) As Byte
    If IsMissing(vDate) Then vDate = Date
    
        Dim iNbJour     As Integer
        Dim iWeekDay    As Integer
        Dim bValTemp    As Byte
        Dim a           As String
        Dim b()         As String
    
    iWeekDay = Weekday(CDate("01/01/" & DatePart("yyyy", vDate)))
    
    Select Case iWeekDay
        Case 1: bValTemp = 5: Case 2: bValTemp = 6: Case 3: bValTemp = 0: Case 4: bValTemp = 1: _
        Case 5: bValTemp = 2: Case 6: bValTemp = 3: Case 7: bValTemp = 4
    End Select
    
    iNbJour = CLng(DateDiff("d", CDate("31/12/" & DatePart("yyyy", vDate) - 1), vDate))
    a = IIf((iNbJour + bValTemp) / 7 < 1, 53, CStr((iNbJour + bValTemp) / 7))
    If VarType(a) = vbString Then b() = Split(a, ","): WeekNumber = b(0): Erase b Else WeekNumber = a
End Function

Sub Exemple_Utilisation()
    MsgBox WeekNumber(#1/8/1990#)
    MsgBox WeekNumber()
End Sub
Langage : VB6 , VBA
Date ajout : 17/04/2007
Posté par mortalino [Liste]
Function WeekNumber(Optional ByVal vDate As Variant) As Byte
    If IsMissing(vDate) Then vDate = Date
    WeekNumber = DatePart("ww", vDate, vbMonday, vbFirstFourDays)
End Function

Sub Exemple_Utilisation()     MsgBox WeekNumber(#4/15/2007#)     MsgBox WeekNumber() End Sub
Remarque :
Solution de Molenn, plus courte que la mienne  ;)
Langage : VB 2005
Date ajout : 16/07/2007
Posté par Bat007 [Liste]

Dim NumSem As String
NumSem = DatePart(DateInterval.WeekOfYear, DateTime.Now, FirstDayOfWeek.Monday).ToString


Langage : Python
Date ajout : 19/12/2007
Posté par 0x586e [Liste]
DateMAJ : 29/12/2007
import time
# Format : Jour/Mois/Année
wy = lambda d: time.strftime('%W',time.strptime(d,'%d/%m/%Y'))
print wy('03/02/2007')
# Affichera '05' 

Remarque :
(La semaine va du Lundi au Dimanche)

Snippets en rapport avec : Date, Datetime, Numero, Semaine, Week



Codes sources en rapport avec : Date, Datetime, Numero, Semaine, Week

{Visual Basic, VB6, VB.NET, VB 2005} RETROUVER LE NUMERO DE LA SEMAINE D'UNE DATE DONNÉE
->NumeroSemaine est la function qui renvoie le numero de la semaine d'une date donnée a part ca ...

{PHP} DATE COMPLETE EN FRANÇAIS
ce code php vous permettra d'afficher au format français et en toutes lettres de la date sur vos pag...

{Delphi} TRI DE CHIFFRE , DATE OU TEXT DANS UN TLISTVIEW
Exemple d'implémentation de tri dans un tlistview pour des dates, chiffres ou du texte...

{SQL} FAIRE UN COUNT ET GROUPER PAR DATE AVEC LA MÉTHODE FLOOR
Il m'est souvent arrivé de devoir faire un Count en groupant par date avec un champ datetime compren...

{PHP} CALENDRIER PAR SEMAINE AVEC ACTIONS
Il s'agit d'un calendrier par semaine, et non par mois. Ce calendrier affiche donc 1 seule semaine ...

{SQL} DERNIER JOUR DU MOIS, OU DE LA SEMAINE
J'ai mis ces fonctions toujour utiles dans CODIX (les snippets) mais l'un est faut et on peut pas le...

{Javascript / DHTML} NUMERO DE LA SEMAINE
Trois méthodes pour l'objet Date, une pour connaître le numéro du jour dans l'année, une pour obteni...

{Visual Basic, VB6, VB.NET, VB 2005} CALCUL AUTOMATIQUE DES N° DE SEMAINE
Code permettant de calculer de manière automatique les N° de semaine sur une période donnée. Expl...

{Visual Basic, VB6, VB.NET, VB 2005} CALENDRIER DE MORET, "VRAI" CALENDRIER PERPÉTUEL
Un sujet qui se lit comme un livre d’histoire, programme sur les dates oblige. Une date comporte 4 é...

{Delphi} [UNITE] RANDDATE : FONCTION RANDRANGEDATE ET RANDOMDATE, GENERATRICES DE DATES ALEATOIRES
Bonjour a tous! voici deux fonctions qui vous seront peut etre utile et surtout qui vont vous app...