如何在ActionScript 3中创建一个日期数组,每天一个,从2008年1月1日到2008年12月31日?
如果它适用于任何日期范围,那将是理想的...
答案 0 :(得分:5)
这个怎么样:
function getDateArray(start:Date, end:Date):Array
{
var result:Array = new Array();
var iter:Date = new Date(start); //you could remove or standardise time info here
while (iter <= end)
{
result.push(new Date(iter));
iter.setDate(iter.getDate() + 1);
}
return result;
}
让AS3 Date类处理每月天数,闰年等的实际问题。
可能有更好的方法可以做任何要求你有一系列日期的事情,但我确信我之前因为合法的原因使用了这样的东西。
答案 1 :(得分:3)
只是想知道为什么你需要一系列日期。不是说它可能没有充分的理由,但它似乎有点奇怪。如果你有一个开始和结束日期,那么可能有更好的方法来做你正在尝试做的事情。还有更多信息吗?
答案 2 :(得分:1)
我需要两个日期之间的天数,因为我的应用程序有一个带有2个拇指的自定义hSlider,允许用户更改他们希望将数据绑定到的日期范围。 (想想谷歌财务)......
我的解决方案:
var startDate:Date = Application.application._model.minDate;
var endDate:Date = Application.application._model.maxDate;
var timespan:Number = endDate.getTime() - startDate.getTime();
var aDay:Number = 86400000;
var days:Number = timespan / aDay;
dateData.length = 0;
var i:int = 0;
dateData.push(new Date(startDate));
dateData.push(new Date(endDate));
for(i = 0; i < days; i++){
var newDate:Date = new Date(startDate.getTime() + i * aDay);
dateData.push(newDate);
}
slider.setThumbValueAt(0, Number(dateData[0]));
slider.setThumbValueAt(1, Number(dateData[i]));
答案 3 :(得分:1)
显然这可能不适合您的应用程序,但为了论证,如果我想要一个控制给定范围内的日期值的hSlider,我会将滑块设置为返回介于0和1之间的值并使用这是两个日期之间的毫秒百分比。这方面的一个例子是:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Script>
<![CDATA[
import mx.events.SliderEvent;
private static var START_DATE : Date = new Date(2009,0);
private static var END_DATE : Date = new Date(2010,0);
[Bindable]
protected var currentDate : Date;
protected function dateSliderChangeHandler(event : SliderEvent) : void
{
var differenceInMilli : Number = END_DATE.time - START_DATE.time;
var percantageMilli : Number = differenceInMilli * event.value;
var currentDateInMilli : Number = START_DATE.time + percantageMilli;
currentDate = new Date(currentDateInMilli);
}
]]>
</mx:Script>
<mx:HSlider id="dateSlider"
width="200"
minimum="0"
maximum="1"
change="dateSliderChangeHandler(event)" />
<mx:Label text="{currentDate}" />
这样我就不必创建所有日期的数组。显然,如果你在日期只需要一定的准确性,那么你需要一些额外的逻辑来上下调整日期。
答案 4 :(得分:0)
没有什么好看的:只需使用两个for循环,内循环检查月份索引(“三十天有九月,四月,六月和十一月”)并计算闰年(我相信今年是一年) ,记住ActionScript的Date对象在几天内不使用从零开始的索引(虽然它确实持续数月):
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="app_init()">
<mx:Script>
<![CDATA[
private function app_init():void
{
var dates:Array = new Array();
for (var month:int = 0; month < 12; month++)
{
for (var day:int = 1; day <= 31; day++)
{
var date:Date = new Date(2008, month, day);
// 30 days has September (8), April (3), June (5) and November (10)...
if ((month == 8 || month == 3 || month == 5 || month == 10) && day == 31)
{
break;
}
// Leap year
else if (month == 1 && day > 29)
{
break;
}
dates.push(date);
}
}
for each (var d:Date in dates)
{
trace(d);
}
}
]]>
</mx:Script>
</mx:Application>
有意义吗? (如果有更优雅的方式,我就不知道了。)