gpt4 book ai didi

ios - 从日期选择器开始的 Swift CountDown 天数

转载 作者:行者123 更新时间:2023-11-28 14:58:00 25 4
gpt4 key购买 nike

我一直在努力在 Swift 中进行倒计时,它只显示距离输入为 DatePicker 的某个日期还剩多少天...我有 Swift 的 creo 经验,所以我一直在努力一段时间。我在这里尝试了一些类似的答案,但没有奏效,我看了一个教程,但这是一个正常的倒计时,有月、日、分和秒,这是代码。

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var timeLabel: UILabel!

let formatter = DateFormatter()
let userCleander = Calendar.current;
let requestedComponent : Set<Calendar.Component> = [
Calendar.Component.month,
Calendar.Component.day
]

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timePrinter), userInfo: nil, repeats: true)

timer.fire()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

func timeCalculator(dateFormat: String, endTime: String, startTime: Date = Date()) -> DateComponents {
formatter.dateFormat = dateFormat
let _startTime = startTime
let _endTime = formatter.date(from: endTime)

let timeDifference = userCleander.dateComponents(requestedComponent, from: _startTime, to: _endTime!)
return timeDifference
}

func timePrinter() -> Void {
let time = timeCalculator(dateFormat: "MM/dd/yyyy a", endTime: "12/25/2018 a")
timeLabel.text = "\(time.month!) Months \(time.day!) Days"
}

}

最佳答案

几件事:不要使用字符串来比较日期。使用日期对象和日历操作。 (稍后会详细介绍。)

不要每秒运行一次计时器。将当前日期保存为用户默认值。当您的应用启动时,将保存的日期与当前日期进行比较,看看日期是否发生了变化。

运行时,监听 UIApplicationSignificantTimeChange 通知,当收到通知时,检查日期是否已更改。

至于将当前日期与用户选择的日期进行比较,您使用 dateComponents(_:from:to:) 的想法是正确的,但是您应该传入 [.day].

编辑:

像这样的代码可以解决问题:

override func viewDidLoad() {
super.viewDidLoad()
//Set up the date picker to pick dates, not dates & times
datePicker.datePickerMode = .date

//Force the date picker to use midnight today as it's base date and
//to pick a date at least 1 day in the future
guard let today = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: Date()),
let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: today)
else {
return
}
datePicker.minimumDate = tomorrow
datePicker.date = tomorrow
}

@IBAction func datePickerChanged(_ sender: UIDatePicker) {
let future = datePicker.date
//Use midnight today as the starting date
guard let today = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: Date()) else { return }

//Calculate the number of days between today and the user's chosen day.
let difference = Calendar.current.dateComponents([.day], from: today, to: future)
guard let days = difference.day else { return }
let ess = days > 1 ? "s" : ""
infoLabel.text = "That date is \(days) day\(ess) away."
}

关于ios - 从日期选择器开始的 Swift CountDown 天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49163496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com