# DatePicker
```swift
struct HomeView: View {
let calendar = Calendar.current
let formatter = DateFormatter()
@State private var selectedDate: Date = Date()
@State private var selectedDateString: String = ""
@State private var selectedDay: Date?
init() {
formatter.dateFormat = "yyyy年 MM月"
}
@State private var isDatePickerVisible = false
// 選択された年と月
@State private var selectedYear: Int = Calendar.current.component(.year, from: Date())
@State private var selectedMonth: Int = Calendar.current.component(.month, from: Date())
// 表示する年の範囲
private let minYear: Int = 2000
private let maxYear: Int = 2024
var body: some View {
VStack {
// 月の切り替えボタン
HStack {
Button(action: {
self.selectedDate = self.calendar.date(byAdding: .month, value: -1, to: self.selectedDate)!
}) {
Image(systemName: "chevron.left")
}
Spacer()
// 選択された月の表示
Button(action: {
// 月の表示部分がタップされたらDatePickerを表示する
self.isDatePickerVisible.toggle()
}) {
Text(formatter.string(from: selectedDate))
.font(.title)
.padding()
}
Spacer()
Button(action: {
self.selectedDate = self.calendar.date(byAdding: .month, value: 1, to: self.selectedDate)!
}) {
Image(systemName: "chevron.right")
}
}
.padding(.horizontal)
}
.padding(.bottom, 20) // 下部に余白を追加
.sheet(isPresented: $isDatePickerVisible) {
// 年月のピッカーを表示するためのシート
VStack {
// DatePickerを閉じるボタン
Button(action: {
self.isDatePickerVisible = false
// 選択された年月からDateを生成
self.selectedDate = self.calendar.date(from: DateComponents(year: selectedYear, month: selectedMonth)) ?? Date()
}) {
Text("閉じる")
.foregroundColor(.blue)
.padding()
}
HStack {
// 年のピッカー
Picker(selection: $selectedYear, label: Text("")) {
ForEach(minYear...maxYear, id: \.self) { year in
Text("\(String(year))年").tag(year) // Stringに変換しないとカンマが入ってしまう
}
}
.pickerStyle(WheelPickerStyle())
.labelsHidden()
.frame(maxWidth: .infinity)
// 月のピッカー
Picker("Month", selection: $selectedMonth) {
ForEach(1...12, id: \.self) { month in
Text("\(month)月")
}
}
.pickerStyle(WheelPickerStyle())
.frame(maxWidth: .infinity)
}
}.presentationDetents([.height(280)]) // シートの高さ
}
}
}
```