Не можах да намеря метод в обекта Flex Date, за да получа седмицата от годината (1 до 52)
Кой е най-добрият начин да намерите това? Има ли полезна библиотека за flex за такива операции с дати като JodaTime в Java.
Не можах да намеря метод в обекта Flex Date, за да получа седмицата от годината (1 до 52)
Кой е най-добрият начин да намерите това? Има ли полезна библиотека за flex за такива операции с дати като JodaTime в Java.
Не знам за библиотека, но тази функция ще ви изведе седмичния индекс (базиран на нула).
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);
}
new Date(2010, 2, 4);
на тази функция и вижте какво връща.
- person Amarghosh; 02.03.2010
Искам само да отбележа, че има грешка в горното решение.
for(var i = 0; i < date.month; i++)
би трябвало
for(var i = 0; i < date.monthUTC; i++)
за да работи правилно.
Все пак благодаря за решението, много ми помогна :)
Преди d да бъде разделено на 7, то трябва да бъде намалено с 1. В противен случай събота ще отиде в следващата седмица.
Вземете 2011 г. като пример, 1/1/2011 е събота. Трябва да е седмица в 0, а 1/8/2011 трябва да е в седмица 1.
Ако d не се намалява, тогава 1+6=7/7=1 и 8+6=14/7=2. Така че тези не са правилни.
Опитах се да използвам функцията на Amarghosh, но имах проблеми с UTC стойностите. И с първите дни на годината също.
Затова промених настройката на jan1 (в зависимост от неделята) и изчислението на последната седмица
Ето функцията, която използвам, базирана на тази на 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;
}