2016-01-21 48 views
0

因此,我正在製作一個應用程序,記錄每天你吃多少卡路里/蛋白質等,然後你可以比較後讓我們說1周平均每天你吃的很多。 一切工作都很完美,它只是從開始會話的確切時間到檢查整體統計的確切時間。在這裏,我將展示一些代碼,我使用此功能工作:檢查兩個NSDate值之間有多少天(只使用00.00而不是正好是當前時間)

這裏是代碼保存起始日期在第一視圖:

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。

+0

可能重複的[兩個NSDates之間的天數](http://stackoverflow.com/questions/4739483/number-of-days-between-two-nsdates) – vadian

回答

0

試試這個:

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:00,這樣的時間並不真正重要,只是之間的日子。

+0

嗯我看不到你設置的位置時間看起來像我的代碼完全一樣我缺少什麼:P? – Robinhiio

+0

'startDate'和'endDate'分別等同於你的'startDay'和'currentDay',只是使用示例日期(與你的例子相似 - 在不同的日子相隔23小時) –

+0

但你的例子就像我的,如果你開始2016-2018會議,然後檢查彙總2016-21-17,那麼它會顯示0天的差異,我希望它只是計算開始日期總是例如2016-20-00.00,即使你開始它2016-20-18.00,我不知道你是在做什麼,我只是不理解它,或者你不明白我的(壞)解釋:P – Robinhiio

相關問題