做專案中經常會遇到秒殺、搶商品啊等等。那麼這個十分秒的倒數是如何**實現的呢!
通常後台會給我們乙個時間戳活著截至日期(deadline)。那麼無論是時間戳還是乙個具體的日期時間點,我們的處理邏輯都是這樣的。統一處理成nsdate物件,那麼就起名叫做enddate吧。我們還有乙個開始時間,就是當前時間,命名為startdate。
我們要取到enddate和startdate的間隔有多久,有多長的時間間隔。那麼廢話少說,開始看**,這樣更清晰。
//結束時間
detaileddict[@」endtime」]為服務端返回的資料。
nsdateformatter *dateformatter=[[nsdateformatter alloc] init];
if ([detaileddict[@」endtime」] length]==10) else
// nsdate *enddate = [dateformatter datefromstring:detaileddict[@」endtime」]];
nsdate *enddate = [dateformatter datefromstring:@」2016-02-20」];
那麼這裡注意了,如果後台給你的是這樣的具體日期,那麼我們還要多加一天的時間,畢竟要倒計時到 2016-02-20日的深夜0:00啊,下一秒就是2016-02-21日了。如果後台給的是時間戳,那麼不用多加一天,因為時間戳就是個具體的時間點。
nsdate *enddate_tomorrow = [[nsdate alloc] initwithtimeintervalsincereferencedate:([enddate timeintervalsincereferencedate] + 24*3600)];
//當前時間
nsdate *startdate = [nsdate date];
//得到相差秒數
nstimeinterval timeinterval =[enddate_tomorrow timeintervalsincedate:startdate];
下面處理ui顯示的邏輯
if (timeinterval==0) else
這裡用到這個 dispatch_source_t _timer;
把timer定義為全域性的。
if (_timer==nil) );
}else
int hours = (int)((timeout-days*24*3600)/3600);
int minute = (int)(timeout-days*24*3600-hours*3600)/60;
int second = timeout-days*24*3600-hours*3600-minute*60;
dispatch_async(dispatch_get_main_queue(), ^else
if (hours<10) else
if (minute<10) else
if (second<10) else
});timeout--;
}});
dispatch_resume(_timer);
}}
倒計時包括天時分秒
專案中有包括天時分秒的倒計時需求,現整理如下,希望幫到有此需求的夥伴 如果後天返回的時間格式為yyyy mm dd hh mm ss 則需要做一些處理轉換成時間戳 dateformat dataformat new dateformat yyyy mm dd hh mm ss trycatch ex...
iOS實現倒計時顯示 時 分 秒
1.建立乙個類繼承自uilabel.用來顯示 時 分 秒 h檔案 import inte ce timelable uilabel property nonatomic,assign nsinteger second property nonatomic,assign nsinteger minut...
js 實現 時分秒 倒計時
計算和顯示的變數分離 h m s用於計算,均為0 59 h1 m1 s1用於顯示 設定定時器,讓s每隔1秒減1 當s 0時,s 59,m m 1 當m 0時,m 59,h h 1 當h 0時,h m s 0,並清除定時器 當h m s小於10時,h1 m1 s1分別前面補0佔位 時間差獲取天時分秒 ...