а вот еще эстетические вариации: один раз генерим список дат и из него потом дергаем что потребуется
Код AS3:
package
{
import flash.display.Sprite;
public class Main extends Sprite
{
public function Main():void
{
var d1:Date = new Date(2014, 3, 29);
var d2:Date = new Date(2014, 4, 11);
DateList.init(2000, 2030);
trace("список : " + DateList.getRange(d1, d2));
trace("всего: " + DateList.getRange(d1, d2).length);
trace(" в апреле 2014: " + DateList.getMonthRange(d1, d2, 2014, 3).length);
trace(" в мае 2014: " + DateList.getMonthRange(d1, d2, 2014, 4).length);
trace(" в июне 2014: " + DateList.getMonthRange(d1, d2, 2014, 5).length);
}
}
}
//===============//
class DateList
{
public static const list:Array = [];
public static const day:int = 24 * 60 * 60 * 1000;
public static function init(y1:int, y2:int):void
{
var d1:Date = new Date(y1);
var d2:Date = new Date(y2, 11, 31);
while (d1.time <= d2.time)
{
list.push(dateToString(d1));
d1.time += day;
}
}
public static function dateToString(d:Date):String
{
return d.getDate() + "-" + d.getMonth() + "-" + d.getFullYear()
}
// список дней диапазона d1..d2
public static function getRange(d1:Date, d2:Date):Array
{
var i1:int = list.indexOf(dateToString(d1));
var i2:int = list.indexOf(dateToString(d2)) + 1;
return list.slice(i1, i2);
}
// список дней диапазона d1..d2, попадающих в year.month
public static function getMonthRange(d1:Date, d2:Date, year:int, month:int):Array
{
var r1:Date = new Date(year, month);
var r2:Date = new Date(year, month + 1, 0);
if (r1 < d1) r1 = d1;
if (r2 > d2) r2 = d2;
return getRange(r1, r2);
}
}