ios - swift 中另一个日期的同一周、月、年中的日期

标签 ios swift date

了解一个日期是否与另一个日期在同一周(或同一年或同一月)的最佳方法是什么,最好使用扩展名,并且仅使用 Swift

例如,在 Objective-C 中我有

- (BOOL)isSameWeekAs:(NSDate *)date {
    NSDateComponents *otherDay = [[NSCalendar currentCalendar] components:NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:self];
    NSDateComponents *today = [[NSCalendar currentCalendar] components:NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];
    return ([today weekOfYear]   == [otherDay weekOfYear] &&
            [today year]         == [otherDay year] &&
            [today era]          == [otherDay era]);
}

请不要提出桥接 DateNSDate 的解决方案

最佳答案

您可以使用日历方法 isDate(equalTo:granularity:) 来检查它,如下所示:

Xcode 11 • Swift 5.1

extension Date {

    func isEqual(to date: Date, toGranularity component: Calendar.Component, in calendar: Calendar = .current) -> Bool {
        calendar.isDate(self, equalTo: date, toGranularity: component)
    }

    func isInSameYear(as date: Date) -> Bool { isEqual(to: date, toGranularity: .year) }
    func isInSameMonth(as date: Date) -> Bool { isEqual(to: date, toGranularity: .month) }
    func isInSameWeek(as date: Date) -> Bool { isEqual(to: date, toGranularity: .weekOfYear) }

    func isInSameDay(as date: Date) -> Bool { Calendar.current.isDate(self, inSameDayAs: date) }

    var isInThisYear:  Bool { isInSameYear(as: Date()) }
    var isInThisMonth: Bool { isInSameMonth(as: Date()) }
    var isInThisWeek:  Bool { isInSameWeek(as: Date()) }

    var isInYesterday: Bool { Calendar.current.isDateInYesterday(self) }
    var isInToday:     Bool { Calendar.current.isDateInToday(self) }
    var isInTomorrow:  Bool { Calendar.current.isDateInTomorrow(self) }

    var isInTheFuture: Bool { self > Date() }
    var isInThePast:   Bool { self < Date() }
}

关于ios - swift 中另一个日期的同一周、月、年中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43663622/

相关文章:

ios - UITableViewDataSource 和 UIViewController 之间的通信

objective-c - 在 Objective C 中使用未声明的标识符

ios - Swift Firebase 完成 block 无限循环

php - 使用 PHP 获取第二天和前一天

javascript - 在 Javascript 中转换 UTC 日期的替代方案?

ios - Swift 3 协议(protocol)和委托(delegate)方法?

ios - UISearchController 使 Controller 变黑

ios - 当用户点击图表时添加点 - 'LineChartView' (iOS-Charts)

ios - swift UserDefaults 返回 nil 作为 NSMutableArray

javascript - 将 Date 对象从 javascript 传递到 asp.net mvc Controller