倒数迅速返回错误的天数

问题描述 投票:0回答:1

我正在尝试以快速获取天,小时,分钟和秒的形式实现到特定日期的倒计时,但是由于某种原因,我的实现返回了错误的天数,直到发生事件,但返回的是正确的时数,分钟和秒。我不确定这里出了什么问题:

let date = Date()

let calendar = Calendar.current

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

let currentDate = calendar.date(from: components)

let userCalendar = Calendar.current

let openingNight = NSDateComponents()
openingNight.year = 2020
openingNight.month = 9
openingNight.day = 10
openingNight.hour = 20
openingNight.minute = 30
openingNight.second = 0

let opener = userCalendar.date(from: openingNight as DateComponents)

let difference = calendar.dateComponents([.second, .minute, .hour, .day], from: currentDate!, to: opener!)

let daysLeft = difference.day
let hoursLeft = difference.hour
let minutesLeft = difference.minute
let secondsLeft = difference.second

daysLabel.text = "\(daysLeft!)"
hourLabel.text = "\(hoursLeft!)"
minuteLabel.text = "\(minutesLeft!)"
secondLabel.text = "\(secondsLeft!)"

返回737661天4小时2分28秒

ios swift nsdate nscalendar
1个回答
0
投票
currentDate的dataComponents中缺少月份和年份。这将给出正确的差异(此处仍然是5月19日,所以距离9月10日还有114天)。

let date = Date() let calendar = Calendar.current let components = calendar.dateComponents([.second, .minute, .hour, .day, .month, .year], from: date as Date) let currentDate = calendar.date(from: components) let userCalendar = Calendar.current let openingNight = NSDateComponents() openingNight.year = 2020 openingNight.month = 9 openingNight.day = 10 openingNight.hour = 20 openingNight.minute = 30 openingNight.second = 0 let opener = userCalendar.date(from: openingNight as DateComponents) let difference = calendar.dateComponents([.second, .minute, .hour, .day], from: currentDate!, to: opener!) let daysLeft = difference.day let hoursLeft = difference.hour let minutesLeft = difference.minute let secondsLeft = difference.second print(difference) // day: 114 hour: 2 minute: 34 second: 6 isLeapMonth: false

© www.soinside.com 2019 - 2024. All rights reserved.