两个 NSDates 的计算差异是错误的 - 已修复
Calculated difference of two NSDates is Wrong - fixed
我遇到了一个问题,但似乎找不到解决方案。有一个日期选择器和两个用于设置开始日期和结束日期的按钮。我的应用计算这两个日期之间的差异。
很遗憾,计算出的差异不正确。例如,当我将 5 Nov, 2016
设置为我的第一个约会并将 6 Nov, 2016
设置为我的第二个约会时,代码 returns 相差 0
天。当我将第二个日期更改为 7 Nov, 2016
时,它 returns 相差 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)
}
}
我找到了解决问题的方法。
我刚刚将以下两行添加到 daysBetweenDates() 函数中
let firstDate = calendar.startOfDayForDate(firstDate)
let secondDate = calendar.startOfDayForDate(lastdate)
上面的代码已更新,现在应该可以正确计算差值。
我遇到了一个问题,但似乎找不到解决方案。有一个日期选择器和两个用于设置开始日期和结束日期的按钮。我的应用计算这两个日期之间的差异。
很遗憾,计算出的差异不正确。例如,当我将 5 Nov, 2016
设置为我的第一个约会并将 6 Nov, 2016
设置为我的第二个约会时,代码 returns 相差 0
天。当我将第二个日期更改为 7 Nov, 2016
时,它 returns 相差 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)
}
}
我找到了解决问题的方法。
我刚刚将以下两行添加到 daysBetweenDates() 函数中
let firstDate = calendar.startOfDayForDate(firstDate)
let secondDate = calendar.startOfDayForDate(lastdate)
上面的代码已更新,现在应该可以正确计算差值。