检查两个 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,所以时间并不重要,重要的只是中间的那几天。
所以我正在制作一个应用程序来计算您每天吃多少 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,所以时间并不重要,重要的只是中间的那几天。