vds_ios/VDS/Components/Calendar/Date+Extension.swift

66 lines
2.1 KiB
Swift

//
// Date+Extension.swift
// VDS
//
// Created by Kanamarlapudi, Vasavi on 26/04/24.
//
import Foundation
extension 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
}
}
var startOfMonth: Date {
Calendar.current.dateInterval(of: .month, for: self)!.start
}
var endOfMonth: Date {
let lastDay = Calendar.current.dateInterval(of: .month, for: self)!.end
return Calendar.current.date(byAdding: .day, value: -1, to: lastDay)!
}
var numberOfDaysInMonth: Int {
Calendar.current.component(.day, from: endOfMonth)
}
var firstWeekDayBeforeStart: Date {
let startOfMonthWeekday = Calendar.current.component(.weekday, from: startOfMonth)
var numberFromPreviousMonth = startOfMonthWeekday - Self.firstDayOfWeek
if numberFromPreviousMonth < 0 {
numberFromPreviousMonth += 7 // Adjust to a 0-6 range if negative
}
return Calendar.current.date(byAdding: .day, value: -numberFromPreviousMonth, to: startOfMonth)!
}
var calendarDisplayDays: [Date] {
var days: [Date] = []
// Start with days from the previous month to fill the grid
let firstDisplayDay = firstWeekDayBeforeStart
var day = firstDisplayDay
while day < startOfMonth {
days.append(day)
day = Calendar.current.date(byAdding: .day, value: 1, to: day)!
}
// Add days of the current month
for dayOffset in 0..<numberOfDaysInMonth {
let newDay = Calendar.current.date(byAdding: .day, value: dayOffset, to: startOfMonth)
days.append(newDay!)
}
return days
}
var monthInt: Int {
Calendar.current.component(.month, from: self)
}
}