Swift: DatePicker-Timer? - PullRequest
       50

Swift: DatePicker-Timer?

3 голосов
/ 16 июня 2020

Эй!

Вот моя проблема:

Итак, у меня есть datepicker, который в основном используется для отправки сообщений по достижении установленного времени. Однако я хотел бы, чтобы время истекло (как по таймеру) до тех пор, пока время не будет достигнуто. Лучше всего в формате (чч: мм: сс), потому что датапикер установлен в формате таймера.

Я только новичок в программировании. Так что я не знаю, что делать: /

Я был бы очень рад, если бы мне кто-нибудь помог!

Заранее большое спасибо.

     let date = NSDate()
     let calendar = Calendar.current

     let components = calendar.dateComponents([.hour, .minute, .month, .year, .day], from: 
     date as Date)

     let currentDate = calendar.date(from: components)

     let userCalendar = Calendar.current

     let competitionDate = self.datepicker.isSelected

     let competition = userCalendar.date(from: competitionDate as DateComponents)!

     let CompetitionDifference = calendar.dateComponents([.hour, .minute, .second], from: 
     currentDate!, to: competition)


     let hoursLeft = CompetitionDifference.hour
     let minutesLeft = CompetitionDifference.minute
     let secondsLeft = CompetitionDifference.second

     print("hours:", hoursLeft ?? "N/A", "minutes:", minutesLeft ?? "N/A", "seconds:", 
     secondsLeft ?? "N/A")

    countDownLabel.text = "\(daysLeft ?? 0) hours, \(hoursLeft ?? 0) minutes, \(minutesLeft 
    ?? 0) seconds"

1 Ответ

1 голос
/ 16 июня 2020

Во-первых, вы просто не можете написать:

let competition = userCalendar.date(from: competitionDate as DateComponents)!

, это просто вызовет ошибку, если competitionDate не DateComponents, а, скажем, Date!

Затем, если вам просто нужны строковые представления количества времени DateComponentsFormatter для вас

попробуйте:

let date = Date()
let calendar = Calendar.current
let userCalendar = Calendar.current

let competitionDate = date + 4899
let comps = userCalendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: competitionDate)



let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
formatter.string(from: date, to: competitionDate) // "1 hour, 21 minutes, 39 seconds"
formatter.unitsStyle = .short
formatter.string(from: date, to: competitionDate) // "1 hr, 21 min, 39"secs"
formatter.unitsStyle = .brief
formatter.string(from: date, to: competitionDate) // "1hr 21min 39secs"
formatter.unitsStyle = .abbreviated
formatter.string(from: date, to: competitionDate) // "1h 21m 39s"
formatter.unitsStyle = .positional
formatter.string(from: date, to: competitionDate) // "1:21:39"
formatter.includesTimeRemainingPhrase = true
formatter.string(from: date, to: competitionDate) // "1:21:39 remaining"

...