У меня проблемы, и я не могу найти решение для этого. Для выбора даты начала и даты окончания вы можете выбрать дату и две кнопки. Мое приложение вычисляет разницу между этими двумя датами.Вычисленная разница двух NSDates не соответствует -
К сожалению, неверно рассчитанная разница. Например, когда я установил 5 Nov, 2016
в качестве моей первой даты и 6 Nov, 2016
в качестве моей второй даты, код возвращает разницу 0
дней. Когда я изменяю вторую дату 7 Nov, 2016
возвращает разницу 1
дня и т.д. Но, когда я делаю это по-другому, установив первыйlastDate
к 6 Nov, 2016
, а затемfirstDate
к 5 Nov, 2016
разница рассчитывается правильно (мощность 1
день). Это как-то зависит от того, какую дату вы ставите в первую очередь.
Вот мой код:
@IBOutlet weak var startDateOutput: UILabel!
@IBOutlet weak var endDateOutput: UILabel!
@IBOutlet weak var datePicker: UIDatePicker!
@IBOutlet weak var answerFieldTimeDifference: UILabel!
var firstDate:NSDate?
var lastDate:NSDate?
@IBAction func startButton(sender: AnyObject)
{
firstDate = datePicker.date
let dateStr = NSDateFormatter.localizedStringFromDate(firstDate!, dateStyle: NSDateFormatterStyle.MediumStyle, timeStyle: NSDateFormatterStyle.NoStyle)
startDateOutput.text = dateStr
daysBetweenDates()
}
@IBAction func expirationButton(sender: AnyObject)
{
lastDate = datePicker.date
let dateStr = NSDateFormatter.localizedStringFromDate(lastDate!, dateStyle: NSDateFormatterStyle.MediumStyle, timeStyle: NSDateFormatterStyle.NoStyle)
endDateOutput.text = dateStr
daysBetweenDates()
}
func daysBetweenDates()
{
if var firstDate = firstDate, var lastDate = lastDate
{
let calendar = NSCalendar.currentCalendar()
let firstDate = calendar.startOfDayForDate(firstDate)
let secondDate = calendar.startOfDayForDate(lastdate)
let components = calendar.components([.Day], fromDate: date1, toDate: date2, options: [])
var differenceInDays = components.day
answerFieldTimeDifference.text = String(differenceInDays)
}
}
Форматирование даты и строковая обработка не являются надлежащим образом для расчета дат. Используйте класс 'NSCalendar' для выполнения правильных вычислений даты. – rmaddy
См. Http://stackoverflow.com/questions/24723431/swift-days-between-two-nsdates для правильного решения. – rmaddy
Я пробовал этот новый метод, но когда я хочу установить одну дату, он немедленно сработает. Вы можете мне помочь? – heisenberg