2010-03-02 5 views
4

Flex Date 객체에서 주 (1 - 52)의 주를 얻는 메소드를 찾을 수 없습니다.플렉스, 날짜를위한 주를 얻는 방법?

가장 적합한 방법은 무엇입니까? Java의 JodaTime과 같은 날짜 연산에 flex를위한 유용한 라이브러리가 있습니까?

답변

5

도서관을 모르지만이 기능으로 주 색인 (제로 기준)을 얻을 수 있습니다.

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

감사하지만이없는 것입니다 내말은. 나는 일주일 동안 1 년에서 52 주까지 검색 할 수 있습니다. 예를 들어 2010 년 3 월 4 일이 9 번째 주입니다. – javanes

+0

정확히이 함수가 당신을 위해 무엇을 할 것인가?이 함수에'new Date (2010, 2, 4); '를 전달하고 그것이 무엇을 반환하는지 봅니다. – Amarghosh

+0

@javanes 죄송합니다. 기능을 실수로 고치 셨습니다. 지금 시도해보십시오. – Amarghosh

1

위의 해결 방법에 오류가 있음을 지적하고 싶습니다.

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

이 제대로 작동하기 위해

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

해야한다.

그럼에도 불구하고 감사 솔루션, 그것은 나에게 많은 :

가 D가 7로 나눈 전에, 그것은 그렇지 않으면 1 씩 감소한다
1

, 토요일 다음 주에 갈 것을 도왔다.

예를 들어 2011 년 1 월 1 일 토요일은 토요일입니다. 그것은 0 주해야하고,이 주 2011년 1월 8일이어야 1.

D가 감소되지 않으면, 다음 1 + 6 = 7분의 7 = 1, 8 + 6 = 7분의 14 = 2. 그래서 이것들은 정확하지 않습니다.

1

Amarghosh의 기능을 사용하려고했지만 UTC 값에 문제가있었습니다. 그리고 일년 중 처음으로.

그러므로 나는 Amarghosh의 하나를 기반으로 내가 사용하는 기능, 와 마지막 주 계산 여기

이다 (일요일)에 따라 jan1의 설정을 수정 :

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; 

}