#42 倒數計時 — Date Picker 和 Date 的練習

練習目的: 學習使用 Date Picker,Date 和將 Date 變成字串,搭配 timer 持續更新現在時間和倒數的時間。

之前沒有特別做到Date Picker的相關主題,就補上這份練習~

先來看一下成品:

功能項目:

  • 跳出視窗設定事件名稱及以DatePicker設定倒數日
  • 以timeInterval得出與現在的時間差
  • 利用Timer設定倒數計時

先拉好storyboard跟IBOutlet、定義變數

畫面調整

IBAction selectDatePicker

#顯示每秒時間差,倒數功能

回到viewDidLoad前取得時間&宣告格式

 let now = Date() //取得現在時間
let dateFormatter = DateFormatter()
var timer: Timer? //宣告timer

#Timer()

在IBAction selectDatePicker設定倒數功能

withTimeInterval: 1 //時間間隔1秒

timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { [self] Timer in

})

以timeIntervalSinceNow獲得所選取的時間與現在時間的差距,獲得數值為每秒,要針對每個時間單位作換算

 let interval = Int(self.countDownDatePicker.date.timeIntervalSinceNow)
let year = interval / (60 * 60 * 24 * 30 * 12)
let mth = interval / (60 * 60 * 24 * 30)
let day = interval / (60 * 60 * 24) % 30
let hrs = interval / (60 * 60) % 24
let min = interval / 60 % 60
let sec = interval % 60

#利用NumberFormatter()設定數字顯示

 let numberFormatter = NumberFormatter() //利用NumberFormatter()設定數字顯示
numberFormatter.formatWidth = 2 //十位數顯示
numberFormatter.paddingCharacter = "0"

#日期格式化

dateFormatter.dateFormat = "yyyy/MM/dd" //存取的格式
let dateString = dateFormatter.string(from: selectDatePicker.date)//將選擇的日期和時間轉換成文字格式(String)

完整程式碼:

@IBAction func selectDatePicker(_ sender: Any) {

//透過 timer 設定每幾秒執行 function
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { [self] Timer in
let interval = Int(self.countDownDatePicker.date.timeIntervalSinceNow)
let year = interval / (60 * 60 * 24 * 30 * 12)
let mth = interval / (60 * 60 * 24 * 30)
let day = interval / (60 * 60 * 24) % 30
let hrs = interval / (60 * 60) % 24
let min = interval / 60 % 60
let sec = interval % 60

countDownLabel.text = String(interval/86400)

let numberFormatter = NumberFormatter() //利用NumberFormatter()設定數字顯示
numberFormatter.formatWidth = 2 //十位數顯示
numberFormatter.paddingCharacter = "0"

yearLabel.text = numberFormatter.string(from: NSNumber(value: year))
monthLabel.text = numberFormatter.string(from: NSNumber(value: mth))
dayLabel.text = numberFormatter.string(from: NSNumber(value: day))
hourLabel.text = numberFormatter.string(from: NSNumber(value: hrs))
minuteLabel.text = numberFormatter.string(from: NSNumber(value: min))
secondLabel.text = numberFormatter.string(from: NSNumber(value: sec))
})


countDownDatePicker.minimumDate = now //設計為倒數日,故最小日期為now

dateFormatter.dateFormat = "yyyy/MM/dd" //存取的格式
let dateString = dateFormatter.string(from: selectDatePicker.date)//將選擇的日期和時間轉換成文字格式(String)
totalDaysLabel.text = dateString

}

--

--