Ios 检查两个NSDate实例是否包含相同的日期值

Ios 检查两个NSDate实例是否包含相同的日期值,ios,swift,Ios,Swift,我不熟悉斯威夫特。 我有一个大问题(就我而言)。 每天结束前我都有需要删除的内容。 我知道我需要为此比较日期,但我不知道如何做。给定两个日期dataA和dateB let calendar = NSCalendar.currentCalendar() var componantsA = calendar.components(NSCalendarUnit.MonthCalendarUnit | NSCalendarUnit.YearCalendarUnit | NSCalenda

我不熟悉斯威夫特。 我有一个大问题(就我而言)。 每天结束前我都有需要删除的内容。
我知道我需要为此比较日期,但我不知道如何做。

给定两个日期
dataA
dateB

    let calendar = NSCalendar.currentCalendar()
    var componantsA = calendar.components(NSCalendarUnit.MonthCalendarUnit | NSCalendarUnit.YearCalendarUnit | NSCalendarUnit.DayCalendarUnit, fromDate:dateA)
    var componantsB = calendar.components(NSCalendarUnit.MonthCalendarUnit | NSCalendarUnit.YearCalendarUnit | NSCalendarUnit.DayCalendarUnit, fromDate:dateB)

    var sameDay:Bool = (componantsA.day == componantsB.day) && (componantsA.month == componantsB.month) && (componantsA.year == componantsB.year)

给定两个日期
dataA
dateB

    let calendar = NSCalendar.currentCalendar()
    var componantsA = calendar.components(NSCalendarUnit.MonthCalendarUnit | NSCalendarUnit.YearCalendarUnit | NSCalendarUnit.DayCalendarUnit, fromDate:dateA)
    var componantsB = calendar.components(NSCalendarUnit.MonthCalendarUnit | NSCalendarUnit.YearCalendarUnit | NSCalendarUnit.DayCalendarUnit, fromDate:dateB)

    var sameDay:Bool = (componantsA.day == componantsB.day) && (componantsA.month == componantsB.month) && (componantsA.year == componantsB.year)

您应该使用NSCalendar方法isDate(inSameDayAsDate:),以便我们可以创建一个NSDate扩展,该扩展使用该方法返回布尔值:

extension NSDate {
    struct Calendar {
        static let gregorian = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
    }
    func isInSameDayAs(date date: NSDate) -> Bool {
        return Calendar.gregorian.isDate(self, inSameDayAsDate: date)
    }
}
用法:

let date1 = NSDate()
let date2 = NSDate().dateByAddingTimeInterval(60)

if date1.isInSameDayAs(date: date2 ){
    print("true")   // "true\n"
} else {
    print("false")
}

您应该使用NSCalendar方法isDate(inSameDayAsDate:),以便我们可以创建一个NSDate扩展,该扩展使用该方法返回布尔值:

extension NSDate {
    struct Calendar {
        static let gregorian = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
    }
    func isInSameDayAs(date date: NSDate) -> Bool {
        return Calendar.gregorian.isDate(self, inSameDayAsDate: date)
    }
}
用法:

let date1 = NSDate()
let date2 = NSDate().dateByAddingTimeInterval(60)

if date1.isInSameDayAs(date: date2 ){
    print("true")   // "true\n"
} else {
    print("false")
}

非常感谢你,莫里亚!它解决了我的问题!:)非常感谢你,莫里亚!它解决了我的问题!:)Leo,只有当应用程序在这个时间间隔(60秒)工作时,这个代码才会起作用,这对吗?但是如果用户将在11点关闭应用程序,并在1点打开,那会怎么样?@БГСССззззззцц60秒只是为了在同一天创建一个不同的日期,当然,如果您在11:59:0xpm尝试此操作,if将为您提供两个不同的日期,您只需将NSDate()保存为NSUserDefaults,下次用户打开应用程序时,您只需检查是否现在(NSDate())它与保存的日期不在同一天。如果不只是在发布时删除它并保存新日期谢谢你,利奥,你救了我的命!Leo,只有当应用程序在这个时间间隔(60秒)工作时,这个代码才会起作用,这对吗?但是如果用户将在11点关闭应用程序,并在1点打开,那会怎么样?@БГСССззззззцц60秒只是为了在同一天创建一个不同的日期,当然,如果您在11:59:0xpm尝试此操作,if将为您提供两个不同的日期,您只需将NSDate()保存为NSUserDefaults,下次用户打开应用程序时,您只需检查是否现在(NSDate())它与保存的日期不在同一天。如果不只是在发布时删除它并保存新日期谢谢你,利奥,你救了我的命!