본문 바로가기

iOS

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

안녕하세요!!

진짜 오랜만에 글을 쓰게 되네요...

진짜 자주 쓰고 싶은데 말처럼 쉽지가 않아서....ㅎ

 

이번에 앱 제작을 하면서 달력을 만들고 싶은데

달력에서 제일 필수로 필요한거는 날짜인데 제가 일일이 다 계산을 하자니 쉽지 않을 것 같아서

구글과 개발문서를 찾아서 알아 냈습니다 ㅎㅎ

 

아래 코드를 참고 하셔서 하시면 될것 같아요 :)

let date = Date(timeIntervalSinceNow: 0)
var calendar = Calendar(identifier: .gregorian)
calendar.locale = Locale(identifier: "ko")

//여기에 기입하지 않은 날짜는 1로 초기화가 된다
let components = calendar?.dateComponents([.year, .month], from: date!)

//day를 기입하지 않아서 현재 달의 첫번쨰 날짜가 나오게 된다
let startOfMonth = calendar?.date(from: components!)!
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)
}

 

'iOS' 카테고리의 다른 글

Swift - UIStackView  (0) 2020.08.03
iOS12버전 호환되게 만들기  (0) 2020.07.16
SwiftUI - some 키워드에 대한 정리  (0) 2020.06.25