ios - 每周特定日期的 NSDate 扩展

标签 ios swift nsdate nscalendar nsdatecomponents

我希望扩展 NSDate 类,以便我能够将当前所在的每周星期二引用为 NSDate。

我知道这可以通过 NSDateComponents 来完成。到目前为止,我有以下内容:

extension NSDate {

var tuesday: NSDate {

    let calendar = NSCalendar.currentCalendar()

    let todaysDate = NSDate()

    let weekdayComponents = calendar.components(.CalendarUnitWeekday | .CalendarUnitWeekdayOrdinal, fromDate: todaysDate)

    weekdayComponents.weekday = 3

    let returnTuesday = calendar.dateByAddingComponents(weekdayComponents, toDate: todaysDate, options: nil)

    return returnTuesday!
}}

我相信 CalendarUnitWeekday 在基于索引的系统上工作(即星期日 = 1,星期六 = 7),这就是为什么我将星期二所需的工作日设置为 3。

但是,当初始化 NSDate 对象并访问此扩展的“星期二”属性时,我提前一个月收到了日期。

(今天的日期 - “2015 年 8 月 26 日,下午 4:42”) (星期二日期 - “2015 年 9 月 26 日,下午 4:42”)

是什么导致了一个月的提前?有没有办法通过扩展 NSDate 类来返回我们所在的每周的具体日期?

谢谢

最佳答案

而不是使用 dateByAddingComponents:,您可以找到今天的工作日并获取它与目标工作日的差异并更新日期组件。 所需的日期可以通过 dateFomComponents 方法使用更新的组件参数生成。

extension NSDate {

    var tuesday: NSDate {

        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components(.CalendarUnitWeekday | .CalendarUnitDay | .CalendarUnitMonth | .CalendarUnitYear | .CalendarUnitHour | .CalendarUnitMinute, fromDate: NSDate())
        let targetDay = 3 //Required day
        let today = components.weekday

        if (targetDay < today) {
            components.day -= today - targetDay
        } else {
            components.day += targetDay - today
        }

        return calendar.dateFromComponents(components)!
    }}

关于ios - 每周特定日期的 NSDate 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32231179/

相关文章:

ios - 无法创建 iTunes 连接沙盒测试器

ios - 谷歌地图整个世界地图适合屏幕(0缩放级别)-IOS

Swift 4 Codable解码json

swift - 测试 CryptoKit 的数据验证

ios - 如何以 24 小时格式获取日期

ios - 当 UIScrollView 滚动时,导航和工具栏不会隐藏

ios - iOS11中的导航栏问题

ios - 使用 Realm.io 与 Swift 的关系

iphone - NSDateComponents 给出奇怪的结果

ios - 如何在 iOS 中获取当前时间而不是设备时间