Jiwift

[iOS/Swift] 특정 월을 기준으로 기간 범위 구하기, 연/월 날짜 범위 구하기 본문

iOS Dev/Swift

[iOS/Swift] 특정 월을 기준으로 기간 범위 구하기, 연/월 날짜 범위 구하기

지위프트 2023. 10. 19. 15:45
반응형

코드 캡처

 안녕하세요. 오늘은 개인적으로 사용하기 위해서 작성한 코드를 공유하려고합니다. 앱 UI 달력에서 월을 선택하면 그 기준으로 전/후 몇개월 기간을 계산해서 서버로 보내야하는 코드가 필요해서 만들었습니다. 

 

 현재는 연/월이 기준이지만 조금만 수정하면 연/월/일까지 사용 가능한 코드라서 조금만 보시면 바로 이해하실겁니다. 아래는 코드입니다. 


// 특정일을 연/월을 기준으로 범위 구하기
static func getDateRange(year: Int,
                         month: Int,
                         past: Int = 0,
                         future: Int = 1) -> (fromDuration: String, toDuration: String) {
    // 입력 받은 날짜로 Date 구성
    let calendar = Calendar.current
    var fromDateComponents = DateComponents()
    fromDateComponents.year = year
    fromDateComponents.month = month
    fromDateComponents.day = 1

    // Calendar 적용
    let inputDate = calendar.date(from: fromDateComponents)!

    // 시작(현재 or 이전) 월을 구하기
    let pastMonth = calendar.date(byAdding: .month, value: -past, to: inputDate)!
    // 일자를 1일로 수정 필요 없으면 제거
    let fromDuration = calendar.date(bySetting: .day, value: 1, of: pastMonth)!

    // 마지막(미래) 월을 구하기
    let futureMonth = calendar.date(byAdding: .month, value: future, to: inputDate)!
    // 일자를 1일로 수정 필요 없으면 제거
    let toDuration = calendar.date(bySetting: .day, value: 1, of: futureMonth)!

    // String 타입 포맷
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"

    // 시작(현재 이전) 날짜 String 변환
    let fromDurationString = dateFormatter.string(from: fromDuration)
    // 마지막(미래) 날짜 String 변환
    let toDurationString = dateFormatter.string(from: toDuration)

    return (fromDurationString, toDurationString)
}

 이 코드는 특정한 연도(year)와 월(month)을 입력으로 받아, 해당 연도와 월을 기준으로 이전(past)과 미래(future)의 월 범위를 계산하고, 그 범위의 시작일과 종료일을 문자열로 반환하는 함수입니다.

 

 코드를 단계별로 설명해보자면

1. 함수 파라메터:

- getDateRange 함수는 4개의 파라미터를 받습니다.

- yearmonth는 범위의 기준이 되는 연도와 월을 나타냅니다.

- past는 현재 월을 기준으로 이전 월의 범위를 나타내는 정수입니다. 기본값은 0이며, 0을 입력하면 현재 월을 포함합니다.

- future는 현재 월을 기준으로 미래 월의 범위를 나타내는 정수입니다. 기본값은 1이며, 1을 입력하면 현재 월을 포함한 다음 월까지의 범위를 반환합니다.

 

2. DateComponents를 사용하여 입력된 연도와 월로 Date 객체를 생성합니다.

- fromDateComponents에 입력된 yearmonth를 설정하고, 일(day)은 1로 설정하여 해당 월의 1일을 나타내는 Date 객체인 inputDate를 생성합니다.

 

3. 시작(현재 이전) 월 계산:

pastMonth 변수를 사용하여 inputDate에서 past 값을 이용해 이전 월의 Date 객체를 계산합니다.

 

4. 마지막(미래) 월 계산:

futureMonth 변수를 사용하여 inputDate에서 future 값을 이용해 미래 월의 Date 객체를 계산합니다.

 

5. Date 객체를 문자열로 변환:

- dateFormatter를 사용하여 Date 객체를 "yyyy-MM-dd" 형식의 문자열로 변환합니다.

- fromDurationtoDuration을 각각 문자열로 변환하여 fromDurationStringtoDurationString 변수에 저장합니다.

 

6. 결과 반환:

- 시작일과 종료일을 문자열로 변환한 값을 튜플 형태로 반환합니다.

 

 이 함수를 호출하면, 입력된 연도와 월을 기준으로 현재 이전(past) 월부터 미래(future) 월까지의 월 범위의 시작일과 종료일이 문자열로 반환됩니다. 이러한 범위를 활용하여 원하는 작업을 수행할 수 있습니다.

반응형