今天要結合timer以及時間的倒數,主要是給優惠券一個期限,並且取得時間做比較,若優惠券的期限還未到,就可以兌換這張優惠券; 反之,則優惠券過期無法兌換。
練習過程中一開始因為立刻就將取得的本地時間做轉換(String),導致後面一直在轉換GMT時間以及本地時間(String)。屆於時間差都是一致的,後來決定在優惠券期限以及系統時間都先採用GMT時間,在最後顯示上再轉成本地時間(GMT +8)。此外因為沒有去觀察優惠券在剩餘一分鐘的時候是顯示多少小時,這裡直接多增加分鐘。
//取得時間
let date = Date()
//給予expired day(Date格式)
let expiredDate = "2017/12/28 17:00" //GMT Time Zone
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/M/d HH:mm"
let expiredDateFromString = formatter.date(from: expiredDate)
print(expiredDateFromString!)
if expiredDateFromString! > date {
let calendar = Calendar.current
//取得時間差
let components = calendar.dateComponents([.minute], from: date, to: expiredDateFromString!)
//將時間轉換成local time
let expiredCalendar = calendar.dateComponents(in: .current, from: expiredDateFromString!)
myCountDownLabel.text = "期限:\(expiredCalendar.year!) 年 \(expiredCalendar.month!) 月 \(expiredCalendar.day!) 日 尚餘:\(components.minute! / 1440) 天 \((components.minute! % 1440) / 60) 時 \(components.minute! % 60) 分"
}
接下來是過期優惠券的部分
else {
let calendar = Calendar.current
let expiredCalendar = calendar.dateComponents(in: .current, from: expiredDateFromString!)
myCountDownLabel.text = "期限:\(expiredCalendar.year!) 年 \(expiredCalendar.month!) 月 \(expiredCalendar.day!) 日 尚餘:0 天 0 時 0 分"
myButtonLabel.setTitle("已 截 止", for: .normal)
//stop timer while expiredDateFromString! < date
timer.invalidate()
}