I just thought you might find this useful.
Since AS does not feature a week number method in the Date() class, and it can be quite a mess to find...
Here it is, should clearly work the same in AS2 and AS3, I left it as a simple function:
Code:/** * ISO-8601 Week Number * Processes the week number of a date, * just like date("W") would do in PHP. * * Procedure by Rick McCarty, 1999 * Adapted to CVI by R.Bozzolo, 2006 * Adapted to AS2 by A.Colonna, 2008 * */ function calculateISO8601WeekNumber(d:Date) { // 1) Convert date to Y M D var Y:Number = d.getFullYear(); var M:Number = d.getMonth(); var D:Number = d.getDate(); // 2) Find out if Y is a leap year var isLeapYear:Boolean = (Y % 4 == 0 and Y % 100 != 0) or Y % 400 == 0; // 3) Find out if Y-1 is a leap year var lastYear:Number = Y - 1; var lastYearIsLeap:Boolean = (lastYear % 4 == 0 and lastYear % 100 != 0) or lastYear % 400 == 0; // 4) Find the Day of Year Number for Y M D var month = [0,31,59,90,120,151,181,212,243,273,304,334]; var DayOfYearNumber:Number = D + month[M]; if(isLeapYear and M > 1) DayOfYearNumber++; // 5) Find the weekday for Jan 1 (monday = 1, sunday = 7) var YY:Number = (Y-1) % 100; // ... var C:Number = (Y-1) - YY; // get century var G:Number = YY + YY/4; // ... var Jan1Weekday:Number = 1 + (((((C / 100) % 4) * 5) + G) % 7); // 6) Find the weekday for Y M D var H:Number = DayOfYearNumber + (Jan1Weekday - 1); var Weekday:Number = 1 + ((H -1) % 7); var YearNumber = Y; var WeekNumber; // 7) Find if Y M D falls in YearNumber Y-1, WeekNumber 52 or 53 if (DayOfYearNumber <= (8-Jan1Weekday) and Jan1Weekday > 4) { trace('Date is within the last week of the previous year.'); YearNumber = Y - 1; if (Jan1Weekday == 5 or (Jan1Weekday == 6 and isLeapYear)) { WeekNumber = 53; } else { WeekNumber = 52; } } // 8) Find if Y M D falls in YearNumber Y+1, WeekNumber 1 if (YearNumber == Y) { var I:Number = 365; if (isLeapYear) { var I:Number = 366; } if (I - DayOfYearNumber < 4 - Weekday) { trace('Date is within the first week of the next year.'); YearNumber = Y + 1; WeekNumber = 1; } } // 9) Find if Y M D falls in YearNumber Y, WeekNumber 1 through 53 if (YearNumber == Y) { trace('Date is within it\'s current year.'); var J:Number = DayOfYearNumber + (7 - Weekday) + (Jan1Weekday -1); WeekNumber = J / 7; if (Jan1Weekday > 4) { WeekNumber--; } } return WeekNumber; };




Reply With Quote