66 lines
2.1 KiB
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)
|
|
}
|
|
|
|
}
|