检查两个 NSDate 值之间的天数(仅使用 00.00 而不是准确的 currentTime)

Check how many days between two NSDate values (With only using 00.00 not the exactly currentTime)

所以我正在制作一个应用程序来计算您每天吃多少 Calories/protein 等,然后您可以比较 1 周后平均每天吃多少。 一切都很完美,只是从您开始会话的确切时间到您检查整体统计数据的确切时间。在这里,我将展示一些我用于此功能的代码:

这是在第一个视图上保存开始日期的代码:

let currentDate = NSDate()

let defaults5 = NSUserDefaults.standardUserDefaults()
defaults5.setObject(currentDate, forKey: "startDay")

这是检查结束日期并比较日期以查看已经过去了多少天的代码(这是另一个视图):

let currentDate = NSDate()
var startDay = NSDate()
var totalDays = Int()

    let defaults1 = NSUserDefaults.standardUserDefaults()
    if let search1 = defaults1.objectForKey("startDay")
    {
        startDay = search1 as! NSDate
    }else{
        print("there is no start date")
    }

func daysBetweenDate(startDate: NSDate, endDate: NSDate) -> Int
{
    let calendar = NSCalendar.currentCalendar()

    let components = calendar.components([.Day], fromDate: startDate, toDate: endDate, options: [])

    return components.day
}

    totalDays = daysBetweenDate(startDay, endDate: currentDate) + 1
    dayLabel.text = String(totalDays)

所以在这种情况下,DayLabel 将显示开始日期和 currentDate (+1) 之间的天数,但我希望忽略小时数,例如,如果我在星期二 16.00 开始会话并在星期三检查 15.00仍然会算作 0 天,因为它只过去了 23 小时,我希望它每次都在 00.00 开始 startDay。

试试这个:

n.b。仅使用 dateFormatter 作为一些样本日期。

let start = "2016-01-20 18"
let end = "2016-01-21 17"

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH"

var startDate:NSDate = dateFormatter.dateFromString(start)!
var endDate:NSDate = dateFormatter.dateFromString(end)!

let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!

startDate = cal.startOfDayForDate(startDate)
endDate = cal.startOfDayForDate(endDate)

let totalDays = cal.components(.Day, fromDate: startDate, toDate: endDate, options: []).day

print(totalDays)

这里我们把这两天的时间都设置为12:00am,所以时间并不重要,重要的只是中间的那几天。