因为09年1月17号我要考雅思,每天都惦记着还有多少天到。于是想做个flex的倒计时来提示自己时间在流逝。
制作第一步是算法。
使用timer控件来做定时器,每秒计算一次。具体算法为
var minusSecond:int=downDate.getSeconds() - currentDate.getSeconds();
var minusMinute:int;
var minusHour:int;
var minusDate:int;
var minusMonth:int;
var minusYear:int;
var sFlag:Boolean;
var mFlag:Boolean;
var hFlag:Boolean;
var monFlag:Boolean;
if(minusSecond<0){
minusSecond=60+minusSecond;
sFlag=true;
}
minusMinute=downDate.getMinutes() - currentDate.getMinutes();
if(sFlag)
minusMinute--;
if(minusMinute<0){
minusMinute=60+minusMinute;
mFlag=true;
}
minusHour=downDate.getHours() - currentDate.getHours();
if(mFlag)
minusHour--;
if(minusHour<0){
minusHour=24+minusHour;
hFlag=true;
}
minusDate =downDate.getDate() - currentDate.getDate();
minusMonth=downDate.getMonth() - currentDate.getMonth();
if(hFlag){
minusDate--;
}
if(minusDate>=0){
minusMonth;
}else{
switch(currentDate.getMonth()+1){
case 1,3,5,7,8,10,12:{
minusDate = downDate.getDate() +(31- currentDate.getDate());
}
case 4,6,9,11:{
minusDate = downDate.getDate() +(30- currentDate.getDate());
}
case 2:{
if((currentDate.getFullYear()%4==0&¤tDate.getFullYear()%100!=0)||(currentDate.getFullYear()%400==0)){//闰年
minusDate = downDate.getDate()+(29 - currentDate.getDate());
}else{
minusDate = downDate.getDate() +(28- currentDate.getDate());
}
}
}
minusMonth--;
}
if(minusMonth<0){
minusMonth=12+minusMonth;
monFlag=true;
}
minusYear=downDate.getFullYear() - currentDate.getFullYear();
if(monFlag){
minusYear--;
}
这个算法的优点是1、年月日各自为政。 2、从秒算起,为负数就向上减一,理解起来和书写起来都很方便滴哦。
第二步是将算法封装到控件,这里我使用的是<mx:Label>
需要强调的是,label换行是个弊端。但它的htmlText属性可以优化界面。
第三步是在应用界面调用封装好的label控件。为了将来计算其他倒计时,我提供了日期选择界面。

以下是我的完整源代码 欢迎切磋 erichan1979@gmail.com
421

被折叠的 条评论
为什么被折叠?



