swift - 如何计算每个季度的天数

标签 swift time

我想知道如何正确获取每个季度的天数。 加上闰年。

例如:

  • 1 个季度:90(或 91 闰年)
  • 2 季度:91 - 当前季度
  • 第三季度:92
  • 4 季度:92

从文档中可以了解到,我们应该将第 12 年分为 4 个部分。然后获取每个季度的天数,例如 3 *(3 个月内的天数)。但是可以用更复杂的方式完成它,而无需硬编码。

最佳答案

您可以使用 DateFormatter dateFormat "q" 并将其转换为整数。

extension Formatter {
    static let quarter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.calendar = Calendar(identifier: .iso8601)
        formatter.locale = Locale(identifier: "en_US_POSIX")
        formatter.dateFormat = "q"
        return formatter
    }()
}

extension Calendar {
    static let iso8601 = Calendar(identifier: .iso8601)
}

extension Date {
    var year: Int { return Calendar.iso8601.dateComponents([.year], from: self).year ?? 0 }
    var quarter: Int { return Int(Formatter.quarter.string(from: self))! }

    var firstDayOfYear: Date { return DateComponents(calendar: .iso8601, year: year, month: 1, day: 1).date!}
    var firstDayOfNextYear: Date { return DateComponents(calendar: .iso8601, year: year.advanced(by: 1), month: 1, day: 1).date! }

    var quarters: (q1: Int, q2: Int, q3: Int, q4: Int) {
        var date = firstDayOfYear
        var q1 = 0, q2 = 0, q3 = 0, q4 = 0
        while date < firstDayOfNextYear {
            switch date.quarter {
            case 1: q1 += 1
            case 2: q2 += 1
            case 3: q3 += 1
            case 4: q4 += 1
            default:
                break
            }
            date = Calendar.iso8601.date(byAdding: DateComponents(day: 1), to: date)!
        }
        return (q1: q1, q2: q2, q3: q3, q4: q4)
    }
}

Playground 测试:

Date().quarter                  // 2
Date().firstDayOfYear.quarter   // 1

Date().quarters   // q1 90, q2 91, q3 92, q4 92)

关于swift - 如何计算每个季度的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43656935/

相关文章:

ios - 我不能在 Swift 中调用多个应用程序消息

带有泛型的 Swift 返回结构

python - 使用 IPython 测量(最大)内存使用情况——类似于 timeit 但 memit

java - 如何将时间的字符串表示形式转换为 Unix 时间?

java - 如何在 Java 中将十进制数转换为日期和时间?

c# - 使用方法 : Find a good mathematical algorithm to distribute measuring points over time?

swift - 人们如何处理 Swift 结构值类型属性的迭代?

ios - 如何使用 RxSwift 和 Alamofire 下载图像?

ios - Spotify session 续订问题

php - If 语句中的逻辑错误?