Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift-nextDate()按日期搜索_Swift_Date_Datetime_Nscalendar_Nsdatecomponents - Fatal编程技术网

Swift-nextDate()按日期搜索

Swift-nextDate()按日期搜索,swift,date,datetime,nscalendar,nsdatecomponents,Swift,Date,Datetime,Nscalendar,Nsdatecomponents,希望能在这方面有所帮助。我正在尝试搜索(向前和向后)以查找与一年中的日期匹配的下一个日期 例如,我有一个300天的值,我知道我们现在是今年的237天(截至2018年8月25日写这篇文章时!),我想向后搜索,找到一年中第300天的前一个事件,并从中格式化一个日期 我已经在使用一个小的日期扩展从日期中提取“一年中的某一天”: extension Date { var dayOfYear: Int { return Calendar.current.ordinality(of:

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

例如,我有一个300天的值,我知道我们现在是今年的237天(截至2018年8月25日写这篇文章时!),我想向后搜索,找到一年中第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])!
有没有人对如何执行这样的搜索有什么建议或方法,根据结果生成日期

提前谢谢


Emile

您可以从今天开始获取当前年份组件,并使用日历
日期(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)!
    }
}


2018年8月25日不是一年中的第237天吗?啊,是的,对不起,打字错误!在原帖子中更正;)
去年最后300天
是去年最后300天还是第300天?这在12月有效吗?OP只需要检查当前日期是否大于300<代码>返回Calendar.current.date(起始日期:DateComponents(Calendar:.iso8601,year:dayOfYear>300?year:year-1,day:300))利奥,完美。这是我刚刚用伪代码写下的东西,所以我也是这么想的。不过,您的实现要干净得多。干杯
let date = Date().last300ThDayOfYear  // "Oct 27, 2017 at 12:00 AM"
print(date.dayOfYear)  // 300