想要获取上个月时的 NSDateComponents 问题
NSDateComponents issue when want to get previous month
我有代码:
let components = NSDateComponents()
components.month -= 1
let dateInTheMiddleOfPeriod = NSCalendar.currentCalendar().dateByAddingComponents(components, toDate: NSDate(), options: NSCalendarOptions(rawValue: 0))!
但 dateInTheMiddleOfPeriod 是 2015-11-18 06:00:12 +0000 ,但我预计 2015-12-18 06:00:12 +0000 ,因为我需要上个月的日期。为什么会这样?
要获取一个月的日期才能按照步骤操作,
- 创建当前日期的组件,
- 然后减一个月,
- 终于再次将组件转换为日期。
示例代码:
let components = NSCalendar.currentCalendar().components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: NSDate())
components.month -= 1
let dateInTheMiddleOfPeriod = NSCalendar.currentCalendar().dateFromComponents(components)!
print(dateInTheMiddleOfPeriod)
您可以使用 Calendar 组件方法获取今天的 Date 年和月组件,传递零日并获取结果日期的月份:
extension Calendar {
static let iso8601 = Calendar(identifier: .iso8601)
}
extension Date {
var year: Int {
Calendar.iso8601.component(.year, from: self)
}
var month: Int {
Calendar.iso8601.component(.month, from: self)
}
var lastDateOfPreviousMonth: Date? {
DateComponents(calendar: .iso8601, year: year, month: month, day: 0).date
}
var previousMonth: Int {
lastDateOfPreviousMonth?.month ?? 0
}
}
Date().lastDateOfPreviousMonth // "28 Feb 2022 00:00"
Date().previousMonth // 2
我有代码:
let components = NSDateComponents()
components.month -= 1
let dateInTheMiddleOfPeriod = NSCalendar.currentCalendar().dateByAddingComponents(components, toDate: NSDate(), options: NSCalendarOptions(rawValue: 0))!
但 dateInTheMiddleOfPeriod 是 2015-11-18 06:00:12 +0000 ,但我预计 2015-12-18 06:00:12 +0000 ,因为我需要上个月的日期。为什么会这样?
要获取一个月的日期才能按照步骤操作,
- 创建当前日期的组件,
- 然后减一个月,
- 终于再次将组件转换为日期。
示例代码:
let components = NSCalendar.currentCalendar().components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: NSDate())
components.month -= 1
let dateInTheMiddleOfPeriod = NSCalendar.currentCalendar().dateFromComponents(components)!
print(dateInTheMiddleOfPeriod)
您可以使用 Calendar 组件方法获取今天的 Date 年和月组件,传递零日并获取结果日期的月份:
extension Calendar {
static let iso8601 = Calendar(identifier: .iso8601)
}
extension Date {
var year: Int {
Calendar.iso8601.component(.year, from: self)
}
var month: Int {
Calendar.iso8601.component(.month, from: self)
}
var lastDateOfPreviousMonth: Date? {
DateComponents(calendar: .iso8601, year: year, month: month, day: 0).date
}
var previousMonth: Int {
lastDateOfPreviousMonth?.month ?? 0
}
}
Date().lastDateOfPreviousMonth // "28 Feb 2022 00:00"
Date().previousMonth // 2