2010-03-02 2 views

Répondre

5

Je ne suis pas au courant d'une bibliothèque, mais cette fonction vous obtiendra l'index de la semaine (basé sur zéro).

function getWeek(date:Date):Number 
{ 
    var days:Array = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; 
    var year:Number = date.fullYearUTC; 
    var isLeap:Boolean = (year % 4 == 0) && (year % 100 != 0) 
         || (year % 100 == 0) && (year % 400 == 0); 
    if(isLeap) 
    days[1]++; 

    var d = 0; 
    //month is conveniently 0 indexed. 
    for(var i = 0; i < date.month; i++) 
    d += days[i]; 
    d += date.dateUTC; 

    var temp:Date = new Date(year, 0, 1); 
    var jan1:Number = temp.dayUTC; 
    /** 
    * If Jan 1st is a Friday (as in 2010), does Mon, 4th Jan 
    * fall in the first week or the second one? 
    * 
    * Comment the next line to make it in first week 
    * This will effectively make the week start on Friday 
    * or whatever day Jan 1st of that year is. 
    **/ 
    d += jan1; 

    return int(d/7); 
} 
+0

de Merci, mais ce n'est pas ce Je veux dire. Je recherche la semaine de l'année qui peut être entre la 1ère et la 52e semaine de l'année. Par exemple, le 4 mars 2010 est la 9ème semaine de l'année. – javanes

+0

C'est exactement ce que cette fonction fera pour vous - passez une 'nouvelle Date (2010, 2, 4);' à cette fonction et voyez ce qu'elle retourne. – Amarghosh

+0

@javanes Oups, il y avait une erreur dans la fonction, l'a réparée. Essayez maintenant. – Amarghosh

1

Je veux juste souligner qu'il y a une erreur dans la solution ci-dessus.

for(var i = 0; i < date.month; i++) 

devrait être

for(var i = 0; i < date.monthUTC; i++) 

afin de fonctionner correctement.

Néanmoins, grâce à la solution, il m'a beaucoup aidé :)

1

Avant d est divisé par 7, il doit être décrémenté par 1. Dans le cas contraire, le samedi serait aller à la semaine prochaine.

Prenez 2011 comme exemple, le 1/1/2011 est samedi. Il devrait être semaine en 0, et 1/8/2011 devrait être en semaine 1.

Si d n'est pas décrémenté, puis 1 + 6 = 7/7 = 1, et 8 + 6 = 14/7 = 2. Donc, ceux-ci ne sont pas corrects.

1

J'ai essayé d'utiliser la fonction Amarghosh mais j'avais des problèmes avec les valeurs UTC. Et avec les premiers jours d'une année aussi.

donc j'ai modifié le réglage de jan1 (selon sundays) et le calcul la semaine dernière

Voici la fonction que j'utilise, basée sur un de Amarghosh:

public static function getWeek(date:Date):String 
{ 
    var days:Array = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; 
    var year:Number = date.fullYear; 
    var isLeap:Boolean = (year % 4 == 0) && (year % 100 != 0) 
     || (year % 100 == 0) && (year % 400 == 0); 
    if(isLeap) 
     days[1]++; 

    var d:Number = 0; 

    for(var i:int = 0; i < (date.month); i++){ 
     d += days[i]; 
    } 

    d += date.date; 

    var temp:Date = new Date(year, 0, 1); 
    var jan1:Number = temp.day; 
    if(jan1 == 0) // sunday 
     jan1 = 7; 
    d += jan1 - 1; 


    var week:int = int((d-1)/7); 

    if(week == 0) // les premiers jours de l'année 
     week = 52; 

    return (week < 10 ? "0" : "") + week; 

} 
Questions connexes