// // Date+Extensions.swift // PadelClub // // Created by Razmig Sarkissian on 01/03/2024. // import Foundation enum TimeOfDay { case morning case noon case afternoon case evening case night var hello: String { switch self { case .morning, .noon, .afternoon: return "Bonjour" case .evening, .night: return "Bonsoir" } } var goodbye: String { switch self { case .morning, .noon, .afternoon: return "Bonne journée" case .evening, .night: return "Bonne soirée" } } } extension Date { func localizedDate() -> String { self.formatted(.dateTime.weekday().day().month()) + " à " + self.formatted(.dateTime.hour().minute()) } var monthYearFormatted: String { formatted(.dateTime.month(.wide).year(.defaultDigits)) } var twoDigitsYearFormatted: String { formatted(Date.FormatStyle(date: .numeric, time: .omitted).locale(Locale(identifier: "fr_FR")).year(.twoDigits)) } var timeOfDay: TimeOfDay { let hour = Calendar.current.component(.hour, from: self) switch hour { case 6..<12 : return .morning case 12 : return .noon case 13..<17 : return .afternoon case 17..<22 : return .evening default: return .night } } } extension Date { func isInCurrentYear() -> Bool { let calendar = Calendar.current let currentYear = calendar.component(.year, from: Date()) let yearOfDate = calendar.component(.year, from: self) return currentYear == yearOfDate } func get(_ components: Calendar.Component..., calendar: Calendar = Calendar.current) -> DateComponents { return calendar.dateComponents(Set(components), from: self) } func get(_ component: Calendar.Component, calendar: Calendar = Calendar.current) -> Int { return calendar.component(component, from: self) } var tomorrowAtNine: Date { let currentHour = Calendar.current.component(.hour, from: self) let startOfDay = Calendar.current.startOfDay(for: self) if currentHour < 8 { return Calendar.current.date(byAdding: .hour, value: 9, to: startOfDay)! } else { let date = Calendar.current.date(byAdding: .day, value: 1, to: startOfDay) return Calendar.current.date(byAdding: .hour, value: 9, to: date!)! } } static var firstDayOfWeek = Calendar.current.firstWeekday static var capitalizedFirstLettersOfWeekdays: [String] { let calendar = Calendar.current // let weekdays = calendar.shortWeekdaySymbols // return weekdays.map { weekday in // guard let firstLetter = weekday.first else { return "" } // return String(firstLetter).capitalized // } // Adjusted for the different weekday starts var weekdays = calendar.veryShortStandaloneWeekdaySymbols if firstDayOfWeek > 1 { for _ in 1..= firstWeekDayBeforeStart && $0 <= endOfMonth }.sorted(by: <) } var monthInt: Int { Calendar.current.component(.month, from: self) } var yearInt: Int { Calendar.current.component(.year, from: self) } var dayInt: Int { Calendar.current.component(.day, from: self) } var startOfDay: Date { Calendar.current.startOfDay(for: self) } } extension Date { func isEarlierThan(_ date: Date) -> Bool { self < date } }