일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- UIKit
- PyQt
- ui
- ios
- Chrats
- PyQt5
- TableView
- library
- androidstudio
- graph
- Python
- Chart
- UITableView
- Swift
- alamofire
- modal
- charts
- Apple
- Storyboard
- Android
- cocoapods
- kotlin
- 개발
- button
- Xcode
- 그래프
- 개발자
- 라이브러리
- UIButton
- 어플리케이션
- Today
- Total
Jiwift
[iOS/Swift] 특정 월을 기준으로 기간 범위 구하기, 연/월 날짜 범위 구하기 본문
안녕하세요. 오늘은 개인적으로 사용하기 위해서 작성한 코드를 공유하려고합니다. 앱 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개의 파라미터를 받습니다.
- year와 month는 범위의 기준이 되는 연도와 월을 나타냅니다.
- past는 현재 월을 기준으로 이전 월의 범위를 나타내는 정수입니다. 기본값은 0이며, 0을 입력하면 현재 월을 포함합니다.
- future는 현재 월을 기준으로 미래 월의 범위를 나타내는 정수입니다. 기본값은 1이며, 1을 입력하면 현재 월을 포함한 다음 월까지의 범위를 반환합니다.
2. DateComponents를 사용하여 입력된 연도와 월로 Date 객체를 생성합니다.
- fromDateComponents에 입력된 year와 month를 설정하고, 일(day)은 1로 설정하여 해당 월의 1일을 나타내는 Date 객체인 inputDate를 생성합니다.
3. 시작(현재 이전) 월 계산:
pastMonth 변수를 사용하여 inputDate에서 past 값을 이용해 이전 월의 Date 객체를 계산합니다.
4. 마지막(미래) 월 계산:
futureMonth 변수를 사용하여 inputDate에서 future 값을 이용해 미래 월의 Date 객체를 계산합니다.
5. Date 객체를 문자열로 변환:
- dateFormatter를 사용하여 Date 객체를 "yyyy-MM-dd" 형식의 문자열로 변환합니다.
- fromDuration와 toDuration을 각각 문자열로 변환하여 fromDurationString과 toDurationString 변수에 저장합니다.
6. 결과 반환:
- 시작일과 종료일을 문자열로 변환한 값을 튜플 형태로 반환합니다.
이 함수를 호출하면, 입력된 연도와 월을 기준으로 현재 이전(past) 월부터 미래(future) 월까지의 월 범위의 시작일과 종료일이 문자열로 반환됩니다. 이러한 범위를 활용하여 원하는 작업을 수행할 수 있습니다.