Это может быть хорошей идеей для пересмотра проблемы, чтобы вы могли получить номер дня в текущем году, и при необходимости вы сможете использовать его для дополнительных расчетов на основе дат. Это легче всего сделать с помощью статического массива целых чисел и небольшой арифметики ...
public static var month_days:Array = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
public static day_num(Date d):int
{
var cumulative_days:int = 0;
for (int i = 0; i < d.month; i++)
{
cumulative_days += month_days[i];
}
cumulative_days += d.date;
if (add_leap_day(d)) cumulative_days++;
return cumulative_days;
}
public static week_num(Date d):int
{
var int day_num = day_num(d);
return Math.floor(day_num/7);
}
public static function add_leap_day(Date d):boolean
{
// I'll let you work this out for yourself
// bear in mind you don't just need to know whether it's a leap year...
}
Остерегайтесь нескольких вещей:
- Ваше определение календарной недели начинается 1 января или в первое воскресенье года?
- Что вы делаете с свободными днями в году, особенно високосными? (52x7! = 365)
- Вас интересует календарь или финансовый год?
- Является ли определение недели одинаковым для каждой недели вашего года? Иногда у Рождества есть две недели или дополнительный месяц!
Я закончил писать целую библиотеку арифметических функций на основе дат для фискальных и обычных календарей. Это сложная проблема, если вы работаете в любой среде, где у вашего пользователя есть своя собственная версия календаря, то есть в любом финансовом приложении.