Skip to content

Instantly share code, notes, and snippets.

@michaelevensen
Last active March 4, 2020 19:48
Show Gist options
  • Save michaelevensen/ac72b90f98f325a8ed0313d89bfc4aef to your computer and use it in GitHub Desktop.
Save michaelevensen/ac72b90f98f325a8ed0313d89bfc4aef to your computer and use it in GitHub Desktop.
Awesome Date extension.
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)!
}
func isBetweeen(date date1: Date, andDate date2: Date) -> Bool {
return date1.compare(self) == self.compare(date2)
}
static var yesterday: Date { return Date().dayBefore }
static var tomorrow: Date { return Date().dayAfter }
var dayBefore: Date {
return Calendar.current.date(byAdding: .day, value: -1, to: noon)!
}
var dayAfter: Date {
return Calendar.current.date(byAdding: .day, value: 1, to: noon)!
}
var noon: Date {
return Calendar.current.date(bySettingHour: 12, minute: 0, second: 0, of: self)!
}
var month: Int {
return Calendar.current.component(.month, from: self)
}
var isLastDayOfMonth: Bool {
return dayAfter.month != month
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment