两个 NSDates 的计算差异是错误的 - 已修复

Calculated difference of two NSDates is Wrong - fixed

我遇到了一个问题,但似乎找不到解决方案。有一个日期选择器和两个用于设置开始日期和结束日期的按钮。我的应用计算这两个日期之间的差异。

很遗憾,计算出的差异不正确。例如,当我将 5 Nov, 2016 设置为我的第一个约会并将 6 Nov, 2016 设置为我的第二个约会时,代码 returns 相差 0 天。当我将第二个日期更改为 7 Nov, 2016 时,它 returns 相差 1 天等。 但是 当我通过设置 首先 lastDate6 Nov, 2016然后firstDate5 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)

上面的代码已更新,现在应该可以正确计算差值。