如何计算每个季度的天数

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

代码语言:javascript复制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

}()

}代码语言:javascript复制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)

}

}操场测试:

代码语言:javascript复制Date().quarter // 2

Date().firstDayOfYear.quarter // 1

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

锂离子电池无损析锂检测研究进展|《魔兽世界》暗月马戏团经验加成领取方法