ISO-8601 Week Number from Date()
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;
};