iOS Date 常用操作

1,753 阅读1分钟
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