NSDate beginning of day and end of day
Start Of Day / End Of Day — Swift 4
// Extensionextension 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)! }}// End of day = Start of tomorrow minus 1 second// End of month = Start of next month minus 1 second
You are missing NSDayCalendarUnit
in
NSDateComponents *components = [cal components:( NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ) fromDate:date];
Swift 5Simple and more precise answer.
Start time: 00:00:00
End time: 23:59:59.5
let date = Date() // current date or replace with a specific datelet calendar = Calendar.currentlet startTime = calendar.startOfDay(for: date)let endTime = calendar.date(bySettingHour: 23, minute: 59, second: 59, of: date)
Extra
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: noon)!let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: noon)!let specificDate = Date("2020-01-01")extension Date { init(_ dateString:String) { let dateStringFormatter = DateFormatter() dateStringFormatter.dateFormat = "yyyy-MM-dd" dateStringFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") as Locale let date = dateStringFormatter.date(from: dateString)! self.init(timeInterval:0, since:date) }}