Swift - nextDate()按年搜索

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift - nextDate()按年搜索相关的知识,希望对你有一定的参考价值。

希望对此有所帮助。我正在尝试搜索(向前和向后)以查找与一年中的某一天匹配的下一个日期

所以,例如我有300天的价值,我知道我们目前正处于今年的第237天(截至本文发布时间为18/08/18!),我想向后搜索以查找之前的事件一年中的第300天,并从中格式化日期。

我已经使用一个小的日期扩展从日期中提取“年中的一天”:

extension Date {
    var dayOfYear: Int {
        return Calendar.current.ordinality(of: .day, in: .year, for: self)!
    }
}

使用Calendar.nextDate()函数,我可以搜索匹配'.day',但这显然是一个月的日子,而不是一年:

let potentialSartDate = (Calendar.current as NSCalendar).nextDate(after: nowDate, matching: .day, value: dayOfYearValueToMatch, options: [.matchNextTime, .searchBackwards])!

有没有人有任何关于如何执行搜索的指针或方法,从而在结果中构建日期?

提前致谢!

埃米尔

答案

您可以从今天开始获取当前年度组件,并使用Calendar date(from: DateComponents)方法获取一年中的第300天,如下所示:

extension Calendar {
    static let iso8601 = Calendar(identifier: .iso8601)
}
extension Date {
    var year: Int {
        return Calendar.current.component(.year, from: self)
    }
    var last300ThDayOfYear: Date {
        return Calendar.current.date(from: DateComponents(calendar: .iso8601, year: dayOfYear > 300 ? year  : year - 1, day: 300))!
    }
    var dayOfYear: Int {
        return Calendar.current.ordinality(of: .day, in: .year, for: self)!
    }
}

let date = Date().last300ThDayOfYear  // "Oct 27, 2017 at 12:00 AM"
print(date.dayOfYear)  // 300

以上是关于Swift - nextDate()按年搜索的主要内容,如果未能解决你的问题,请参考以下文章

NextDate问题

WordPress 按年每月存档

oracle表分区详解(按天按月按年等)

第4次作业类测试代码+101+谢艳敏

第4次作业类测试代码+105032014125+洪诗育

黑盒测试——nextDate函数测试(等价类划分法边界值分析法判定表驱动法)