Archive/위젯 캘린더(project-ios)

[iOS] Swift Calendar 첫 날과 마지막 날 찾기

lgvv 2022. 5. 3. 17:10

Swift Calendar 알고리즘 구현하기

 

✅ 이번에는 해당하는 년도와 달을 주면 첫 날의 요일과 마지막 날과 마지막 날의 요일을 찾는 알고리즘을 구해보자.

 

 

 

✅ 코드

func calendarCellCount(year: Int, month: Int) {
        let date = Date(timeIntervalSinceNow: 0)
        var calendar = Calendar.current
        calendar.locale = Locale(identifier: "ko_kr")

        // 여기에 기입하지 않은 날짜는 1로 초기화가 된다
        let components = calendar.dateComponents([.year, .month], from: date)
        let myDateComponents = DateComponents(year: year, month: month)
        
        // day를 기입하지 않아서 현재 달의 첫번쨰 날짜가 나오게 된다
        let startOfMonth = calendar.date(from: myDateComponents)
        let comp1 = calendar.dateComponents([.day,.weekday,.weekOfMonth], from: startOfMonth!)

        // 이번 달의 마지막 날짜를 구해주기 위해서 다음달을 구한다 이것도 day를 넣어주지 않았기 때문에 1이 다음달의 1일이 나오게 된다
        let nextMonth = calendar.date(byAdding: .month, value: +1, to: startOfMonth!)
        
        // 위에 값에서 day값을 넣어주지 않았기 떄문에 1이 나오게 되므로 마지막 날을 알기 위해서 -1을 해준다
        let endOfMonth = calendar.date(byAdding: .day, value: -1, to: nextMonth!)
                
        let comp2 = calendar.dateComponents([.day, .weekday, .weekOfMonth], from: endOfMonth!)
        let weekArr = calendar.shortWeekdaySymbols

        if let weekday = comp1.weekday, let weekday2 = comp2.weekday {
            print(weekArr[weekday-1]) // 첫날의 요일
            print(weekArr[weekday2-1]) // 마지막 날의 요일
        }
        
        //이 달의 첫번째 날과 끝날을 구했으니깐 그 사이의 날짜는 for문을 통해서 구하면 된다
        //현재 만들어 놓은 달력의 label변수들을 배열에 저장하여서 for문을 돌면서 차례대로 값을 집어 넣으면 되는데
        //label값에 entry값을 집어 넣는 위치는 첫번째 날짜의 weekday를 기준으로 하면 된다
        for i in comp1.day!...comp2.day! {
            print(i)
        }
    }

 

✅ 참고

https://peachberry0318.tistory.com/17

 

Swift - 달의 첫날과 마지막날 알아내기

안녕하세요!! 진짜 오랜만에 글을 쓰게 되네요... 진짜 자주 쓰고 싶은데 말처럼 쉽지가 않아서....ㅎ 이번에 앱 제작을 하면서 달력을 만들고 싶은데 달력에서 제일 필수로 필요한거는 날짜인데

peachberry0318.tistory.com