我想知道如何正確獲得每年季度的天數。 併入閏年。如何計算每個季度的天數
例如:
- 1季度:90(或91閏年)
- 2季度:91 - 電流季度
- 3季度:92
- 4季度:92
從文檔可以理解,我們應該把12年分成4部分。然後像3 *(3個月內的天數)得到每個季度的日數。但是它是如何以更復雜的方式完成的,而不需要硬編碼。
我想知道如何正確獲得每年季度的天數。 併入閏年。如何計算每個季度的天數
例如:
從文檔可以理解,我們應該把12年分成4部分。然後像3 *(3個月內的天數)得到每個季度的日數。但是它是如何以更復雜的方式完成的,而不需要硬編碼。
您應該使用NSCalendar對象來計算每個季度的天數。
例如:第一季度:1月1日至4月1日
let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd"
let firstDate = df.date(from: "2017-01-01")!
let secondDate = df.date(from: "2017-04-01")!
let calendar = Calendar(identifier: .gregorian)
let dateComponents = calendar.dateComponents([Calendar.Component.day], from: firstDate, to: secondDate)
print("number of day of Q1: \(dateComponents.day)")
我可以從DateFormatter獲得當前季度嗎? –
DateFormatter中沒有任何季度信息(或者我不知道)。但是您可以使用NSCalendar從當前日期(對於Calendar.Component.quarter)獲取DateComponents,然後您就可以知道當前季度。 –
我發現DateFormatter可以提供季度信息「Q」 - 一年中的季度。如果您想要零填充,請使用QQ。 –
您可以使用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)
}
}
遊樂場測試:
Date().quarter // 2
Date().firstDayOfYear.quarter // 1
Date().quarters // q1 90, q2 91, q3 92, q4 92)
好的答案。特別是擴展格式化器。 –
謝謝你,不客氣 –
創建'DateComponents'爲1月1日,4月1日等,然後使用'Calendar'方法來計算天數的差異。 –