2015-03-13 58 views
2

我正在查詢數據庫的startDate和endDate之間的值。因此,我正在尋找一種簡單的方法來獲得NSDate,以便在某天約會結束。就像你可以得到startOfDayForDate()一樣。整潔的方式來結束約會的日期?

我想你可以這樣做:

let cal = NSCalendar.currentCalendar() 
let startOfDay = cal.startOfDayForDate(NSDate()) 
let aDay:NSTimeInterval = 60*60*23 + 60*59 + 59 
let endofDay = startOfDay.dateByAddingTimeInterval(aDay) 

是增加component.day + 1 startOfDayForDate得到的日期「一天結束」正確的方法,或者是有沒有更好的方法?

+0

根據定義一天開始是另一個終點。你能更加描述你期待的輸出嗎? – 2015-03-13 15:19:50

回答

8

更好的方法是獲得第二天的開始,並減去0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001秒。

你明白我想說什麼嗎?定義一天結束是非常困難的。 23:59當然不是一天結束的時間,直到第二天幾乎還有一分鐘的時間。甚至23:59:59也不是一天結束。因爲在這段時間和第二天的開始之間有無數的秒數。據我所知,NSDate支持納秒開箱即用,所以在目前的實現中,在23:59:59和第二天之間至少有1000萬個可能的NSDate。

這就是爲什麼你應該看看你是否可以找到一種方法來使用第二天的開始。

例如,您可以使用if (startOfDay <= date && date < startOfNextDay)而不是if (startOfDay <= date && date <= endOfDay)

要計算第二天的開始,您必須使用NSCalendar。在iOS8上的蘋果添加了一些很好的方法來進行這些計算短:

let calendar = NSCalendar.currentCalendar() 
let startOfDay = calendar.startOfDayForDate(NSDate()) 
let startOfNextDay = calendar.dateByAddingUnit(.CalendarUnitDay, value: 1, toDate: startOfDay, options: nil)! 

編輯:既然你現在狀態,你想查詢你不用找了一天的最後一個數據庫。檢查日期是在一天開始還是在一天開始之後,以及在第二天開始之前。

+0

是啊是啊,我明白這個問題可能有點傻,我改變了這個問題。 – KML 2015-03-13 15:28:37

+1

這其實並不傻。我試圖計算前一天的結束。從經驗來看,我可以說它不能很好地工作。 ;)使用' 2015-03-13 15:30:29

+0

好吧,我解釋你的答案是:沒有沒有整潔的endOfDay相當於startOfDay。由於它不是像nanoseconds是一個問題的應用程序,我只會添加「幾乎一天」startOfDay。謝謝馬提亞斯 – KML 2015-03-13 15:49:32

2

試試這個:

var endOfDay: Date? { 
    var components = DateComponents() 
    components.day = 1 
    components.second = -1 

    var calendar = Calendar.current 
    calendar.timeZone = TimeZone(abbreviation: "GMT")! 
    return calendar.date(bySettingHour: 11, minute: 59, second: 59, of: Date()) 
} 
相關問題