因为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