web-dev-qa-db-ja.com

2つのNSDatesが同じ日かどうかを確認する方法

私はios開発に取り組んでいますが、2つのNSDateが同じ日からのものであるかどうかを確認するのは非常に困難です。これを使ってみた

   fetchDateList()
    // Check date
    let date = NSDate()
    // setup date formatter
    let dateFormatter = NSDateFormatter()
    // set current time zone
    dateFormatter.locale = NSLocale.currentLocale()

    let latestDate = dataList[dataList.count-1].valueForKey("representDate") as! NSDate
    //let newDate = dateFormatter.stringFromDate(date)
    let diffDateComponent = NSCalendar.currentCalendar().components([NSCalendarUnit.Year, NSCalendarUnit.Month, NSCalendarUnit.Day], fromDate: latestDate, toDate: date, options: NSCalendarOptions.init(rawValue: 0))
    print(diffDateComponent.day)

ただし、2つのNSDateに24時間の差があるかどうかを確認するだけです。私はそれを機能させる方法があると思いますが、それでも前日にカウントするために午前2時前にNSDate値を保持したいので、ここで間違いなく助けが必要です。ありがとう!

43
JoshJoshJosh

NSCalendarには、実際に必要なことを正確に行うメソッドがあります!

/*
    This API compares the Days of the given dates, reporting them equal if they are in the same Day.
*/
- (BOOL)isDate:(NSDate *)date1 inSameDayAsDate:(NSDate *)date2 NS_AVAILABLE(10_9, 8_0);

したがって、次のように使用します。

[[NSCalendar currentCalendar] isDate:date1 inSameDayAsDate:date2];

またはスウィフトで

Calendar.current.isDate(date1, inSameDayAs:date2)
128
Catfish_Man

日付コンポーネントを比較する必要があります。

let date1 = NSDate(timeIntervalSinceNow: 0)
let date2 = NSDate(timeIntervalSinceNow: 3600)

let components1 = NSCalendar.currentCalendar().components([.Year, .Month, .Day], fromDate: date1)
let components2 = NSCalendar.currentCalendar().components([.Year, .Month, .Day], fromDate: date2)

if components1.year == components2.year && components1.month == components2.month && components1.day == components2.day {
    print("same date")
} else {
    print("different date")
}

または短く:

let diff = Calendar.current.dateComponents([.day], from: self, to: date)
if diff.day == 0 {
    print("same day")
} else {
    print("different day")
}
9
Mike Henderson