Les Snippets

Connexion

Recuperer le numero de la semaine

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 25/03/2006 23:36:20 et initié par EBArtSoft [Liste]
Vue : 16860
Catégorie(s) : Maths
Langages dispo pour ce code :
- VB6, VBA
- PHP 3, PHP 4, PHP 5
- C# 1.x, C# 2.x
- VB6
- VB 2005, VB.NET 1.x
- C# 1.x, C# 2.x
- VB6, VBA
- Tcl



Langage : VB6 , VBA
Date ajout : 25/03/2006
Posté par EBArtSoft [Liste]

Public Function NumeroSemaine(dateSemaine As Date) As Integer
    Dim NumJour             As Integer
    Dim NbJour              As Integer
    Dim nbpremier           As Integer
    Dim Jour                As Date
    Dim DernierJourSemaine  As Date

    'Correspond au 1 er janvier de l'année de la date donnée
    Jour = DateSerial(Year(dateSemaine), 1, 1)
    
    'Correspond au jour dans la semaine (1 = lundi, 2 = mardi, 3 = mercredi, 4 = jeudi, etc ...)
    NumJour = Weekday(Jour, vbMonday)
    
    'Correspond au dernier jour de la semaine du 1er janvier
    DernierJourSemaine = DateSerial(Year(dateSemaine), 1, 8 - NumJour)
    
    'Si le 1er janvier est après le vendredi, la semaine du 1 er janvier n'est pas comptabilisée dans la nouvelle année
    If NumJour > 5 Then
        NumeroSemaine = 0
    Else
    'sinon elle l'est
        NumeroSemaine = 1
    End If
    
    'Différence entre la date et le jour de la fin de semaine du 1er janvier
    NbJour = dateSemaine - DernierJourSemaine

    'Ensuite, on calcule le numéro de la semaine
    'Si le calcul tombe juste, on met le résultat
    If NbJour Mod 7 = 0 Then
        NumeroSemaine = (NbJour / 7) + NumeroSemaine
    Else
    'Sinon, on, rajoute un car il y a une semaine en cours
        NumeroSemaine = NumeroSemaine + Int(NbJour / 7) + 1
    End If
    
    'Si le numéro est égal à 53, on vérifie où se trouve le 1er janvier
    If NumeroSemaine = 53 Then
        nbpremier = Weekday(DateSerial(Year(dateSemaine) + 1, 1, 1), vbMonday)
        'Si le 1er tombe avant le vendredi, le numéro de la semaine est le numéro 1
        If nbpremier < 5 Then NumeroSemaine = 1
        'sinon, le numéro est le 53
    End If
    
    'Le numéro de la semaine peut être egale à 0 (01/01/2005)
    'car il ne detécte pasla semaine 53
    'On cherche alors le numéro de la semaine du 31/12 de l'année d'avant
    If NumeroSemaine = 0 Then
        'Sauf si le 01/01 est le lundi
        If nbpremier = 1 Then
            NumeroSemaine = 1
        Else
            NumeroSemaine = NumeroSemaine(DateSerial(Year(dateSemaine) - 1, 12, 31))
        End If
    End If
End Function


Remarque :
'J'ai perdu le nom de l'auteur
Langage : PHP 3 , PHP 4 , PHP 5
Date ajout : 27/03/2006
Posté par malalam [Liste]
echo date ('w'); // renvoie le numéro du jour de la semaine de la date courante (0 pour dimanche, 6 pour samedi).
echo date ('w', $timestamp); // idem, pour un timestamp donné
Langage : C# 1.x , C# 2.x
Date ajout : 30/04/2006
Posté par Bidou [Liste]
public static int ISOWeekNumber(DateTime dt) 
{
int yyyy = dt.Year; 
int mm = dt.Month;
int dd = dt.Day; 
// Declare other required variables
int jan1WeekDay; 
int weekNumber = 0;
int weekDay = 0; 
int i, j, k, l, m, n;
int[] mnth = new int[12] { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; 
int yearNumber;
// Set DayofYear Number for yyyy mm dd

int dayOfYearNumber = dd + mnth[mm - 1]; 
// Increase of Dayof Year Number by 1, if year is leapyear and month is february
if ((IsLeapYear(yyyy)) && (mm == 2)) dayOfYearNumber += 1; 
// Find the Jan1WeekDay for year 

i = (yyyy - 1) % 100;

j = (yyyy - 1) - i;

k = i + i / 4;

jan1WeekDay = 1 + (((((j / 100) % 4) * 5) + k) % 7);

// Calcuate the WeekDay for the given date

l = dayOfYearNumber + (jan1WeekDay - 1);

weekDay = 1 + ((l - 1) % 7);

// Find if the date falls in YearNumber set WeekNumber to 52 or 53
if ((dayOfYearNumber <= (8 - jan1WeekDay)) && (jan1WeekDay > 4)) 
{

yearNumber = yyyy - 1;
if ((jan1WeekDay == 5) || ((jan1WeekDay == 6) && (jan1WeekDay > 4))) weekNumber = 53;else weekNumber = 52; 
}

else yearNumber = yyyy;
// Set WeekNumber to 1 to 53 if date falls in YearNumber

if (yearNumber == yyyy) 
{
if (IsLeapYear(yyyy) == true) m = 366; 
else m = 365;
if ((m - dayOfYearNumber) < (4 - weekDay)) 
{

yearNumber = yyyy + 1;

weekNumber = 1;

}

}
if (yearNumber == yyyy) 
{

n = dayOfYearNumber + (7 - weekDay) + (jan1WeekDay - 1);

weekNumber = n / 7;
if (jan1WeekDay > 4) weekNumber -= 1; 
}
return (weekNumber); 
}
public static bool IsLeapYear(int yyyy) 
{
return ((yyyy % 4 == 0 && yyyy % 100 != 0) || (yyyy % 400 == 0)); 
} 

Remarque :
Repris de http://www.thecodeproject.com/csharp/GregToISO.asp
Langage : VB6
Date ajout : 30/04/2006
Posté par Gobillot [Liste]

 Public Function NumeroSemaine(dateSemaine As Date) As Integer
     NumeroSemaine = DatePart("ww", dateSemaine, vbMonday, vbFirstFourDays)
     If NumeroSemaine > 52 Then
        If DatePart("ww", dateSemaine + 7, vbMonday, vbFirstFourDays) = 2 Then
           NumeroSemaine = 1
           End If
        End If
 End Function
 
 
Langage : VB.NET 1.x , VB 2005
Date ajout : 04/11/2007
Posté par Willi [Liste]

Public Shared Function GetWeekNumber(ByVal time As DateTime) As Integer

Dim ci As System.Globalization.CultureInfo = System.Globalization.CultureInfo.InstalledUICulture
Dim cal As System.Globalization.Calendar = ci.Calendar
Return cal.GetWeekOfYear(time, ci.DateTimeFormat.CalendarWeekRule, ci.DateTimeFormat.FirstDayOfWeek)
End Function

Remarque :
Exemple:
Dim iWeekNumber = GetWeekNumber(DateTime.Now)
Langage : C# 1.x , C# 2.x
Date ajout : 04/11/2007
Posté par Willi [Liste]

public static int GetWeekNumber(DateTime time)
{
  System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.InstalledUICulture;
  System.Globalization.Calendar cal = ci.Calendar;

  return cal.GetWeekOfYear(time, ci.DateTimeFormat.CalendarWeekRule, ci.DateTimeFormat.FirstDayOfWeek);

}


Remarque :
Exemple:
int iWeekNumber = GetWeekNumber(DateTime.Now);
Langage : VB6 , VBA
Date ajout : 04/01/2008
Posté par Renfield [Liste]
'# http://fr.wikipedia.org/wiki/ISO_8601#Num.C3.A9ro_de_semaine
Public Function Week(ByVal vDate As Date) As Integer
Dim dThursday As Date
Dim dMonday As Date
Dim nResult As Single
   '# Calculer le jeudi de la même semaine que la date cherchée.
   '# On calculera le numéro de semaine de ce jeudi pour être sûr de compter dans la
   '# bonne année sans test particulier. (Ce jeudi peut tomber l'année précédente ou suivante,
   '# c'est tout l'intérêt.)
   dThursday = DateAdd("D", 4 - Weekday(vDate, vbMonday), vDate)
   
   '# On considère le 4 janvier de la même année que ce jeudi
   dMonday = DateSerial(Year(dThursday), 1, 4)
   
   '# On calcule le lundi de la même semaine que ce 4 janvier (identifiant ainsi le début du comptage;
   '# noter que ce lundi peut lui même tomber l'année encore avant: peu importe)
   dMonday = DateAdd("D", 1 - Weekday(dMonday, vbMonday), dMonday)
   '# On calcule le nombre de jours écoulés entre nos deux dates particulières (ce jeudi et ce lundi).
   '# On divise par 7 (arrondir à l'entier supérieur). On a le résultat voulu.
   nResult = Abs(DateDiff("D", dThursday, dMonday)) / 7
   If Fix(nResult) <> nResult Then
       Week = nResult + 1
   Else
       Week = nResult
   End If
End Function 
Langage : Tcl
Date ajout : 28/07/2009
Posté par gersoo [Liste]
set S [expr 1 + [clock format [clock seconds] -format %U]]