這次的項目不僅用到了手機驗證碼的功能,客戶還希望有一個Timer來提示用戶驗證碼的有效時間。
假設通過服務端獲取簡訊後的回傳訊息如下:
1 |
{"reg_code_create_time":"2015-07-15 10:40:32","success":true} |
- reg_code_create_time是告訴API調用者驗證碼的生成時間。
- success表示申請驗證碼成功。
- 假設驗證碼有效期為30分鐘。
- 收到驗證碼位字符串yyyy-MM-dd HH:mm:ss的格式
NSString轉換成NSDate
1 2 3 4 5 6 7 |
NSString *codeTimeString = [userDefaults valueForKey:@"reg_code_create_time"]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *codeDate = [dateFormatter dateFromString:codeTimeString]; |
然後我們需要一個有效期限,即驗證碼生成時間+30分鐘。
1 |
NSDate *validDate = [codeDate dateByAddingTimeInterval:30*60]; |
比較兩者的時間差
1 |
NSTimeInterval timeDiff = [validDate timeIntervalSinceDate:codeDate]; |
這樣就會獲得時間差,單位是毫秒,我需要的功能就到這裡完成了。
另外NSDate轉換成NSString的例子
1 2 3 |
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSString *aString = [dateFormatter stringFromDate:date]; |
由於用戶可能會關閉App等操作,可以將驗證碼生成的時間保存在NSUserDefaults裡面,作為臨時的存儲。
可以搭配MZTimerLabel這個開源小工具,來動態顯示倒數時間的效果。
這類經常使用的功能,可以直接封裝到自己的Helper裡面,更容易擴展、修改,也省了很多代碼。
(完)