Swift - nextDate() 按一年中的某一天搜索

标签 swift date datetime nscalendar nsdatecomponents

希望在这方面得到一些帮助。我正在尝试(向前和向后)搜索以查找与一年中的某一天

匹配的下一个日期

例如,我的日期值为 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])!

有人有任何关于如何执行这样的搜索并从结果中构建日期的指示或方法吗?

提前致谢!

埃米尔

最佳答案

您可以从今天开始获取当前年份组件,并使用日历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() 按一年中的某一天搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52018182/

相关文章:

ios - 下载图像时检查 Nil 后变量显示 Nil

ios - Swift 是否可以继承一个轻量级的通用 Objective-c 类?

java - 仅从时间戳中获取日期

java - Spring myBatis 强制将 ZonedDateTime 保存在系统默认时区,如何防止?

PHP 日期格式精度

swift - 从 SKAction.rotateToAngle() 获取旋转详细信息 - SpriteKit

swift - 我可以使用数组更改 socket ,而不是对所有内容进行硬编码吗?

php - 微时间到标准日期格式

javascript - 在 Javascript 中格式化日期,得到未定义的 NaN

java - 将日期和时间转换为选定的时区