extension Date {
/// 日初
var startOfDay: Date {
return Calendar.current.startOfDay(for: self)
}
/// 日末
var endOfDay: Date {
var components = DateComponents()
components.day = 1
components.second = -1
return Calendar.current.date(byAdding: components, to: startOfDay)!
}
/// 月初
var startOfMonth: Date {
let components = Calendar.current.dateComponents([.year, .month], from: startOfDay)
return Calendar.current.date(from: components)!
}
/// 月末
var endOfMonth: Date {
var components = DateComponents()
components.month = 1
components.second = -1
return Calendar.current.date(byAdding: components, to: startOfMonth)!
}
/// 年初
var startOfYear: Date {
let components = Calendar.current.dateComponents([.year], from: startOfDay)
return Calendar.current.date(from: components)!
}
/// 年末
var endOfYear: Date {
var components = DateComponents()
components.year = 1
components.second = -1
return Calendar.current.date(byAdding: components, to: startOfYear)!
}
}
测试代码
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ"
dateFormatter.timeZone = NSTimeZone.system
dateFormatter.calendar = Calendar(identifier: Calendar.Identifier.gregorian)
let date = Date()
print("date = \(dateFormatter.string(from: date))")
print("startOfDay = \(dateFormatter.string(from: date.startOfDay))")
print("endOfDay = \(dateFormatter.string(from: date.endOfDay))")
print("startOfMonth = \(dateFormatter.string(from: date.startOfMonth))")
print("endOfMonth = \(dateFormatter.string(from: date.endOfMonth))")
print("startOfYear = \(dateFormatter.string(from: date.startOfYear))")
print("endOfYear = \(dateFormatter.string(from: date.endOfYear))")
输出
date = 2019-09-16 15:21:28 +0800
startOfDay = 2019-09-16 00:00:00 +0800
endOfDay = 2019-09-16 23:59:59 +0800
startOfMonth = 2019-09-01 00:00:00 +0800
endOfMonth = 2019-09-30 23:59:59 +0800
startOfYear = 2019-01-01 00:00:00 +0800
endOfYear = 2019-12-31 23:59:59 +0800