【備忘録】Swiftで今週の月曜日を取得する
今週の期間を表示したかったので月曜日から日曜日を取得する場合のメモ。
デフォルトは日曜スタートなので、月曜スタートにしたい場合は工夫が必要っぽい。
// 今週の期間を表示
func showWeeklyDate() {
let formatter = DateFormatter()
formatter.dateFormat = "M/d (E)" // 月/日 (曜日) の形式に変更
let calendar = Calendar.current
let today = Date()
var components = calendar.dateComponents([.year, .month, .day, .weekday], from: today)
let weekday = components.weekday ?? 1 // 1 is Sunday, 2 is Monday, ..., 7 is Saturday
// 月曜日から始まる週の場合、日曜日までの日数を計算する
// 日曜日の場合、過去6日分を引くことで月曜日に移動
// それ以外の曜日の場合、月曜日までの日数を計算して月曜日に移動
let daysToAdd = weekday == 1 ? -6 : 2 - weekday
// 月曜日を取得
components.day = components.day! + daysToAdd
let monday = calendar.date(from: components)!
// 日曜日を取得
components.day = components.day! + 6
let sunday = calendar.date(from: components)!
datelabel2.text = "\(formatter.string(from: monday)) 〜 \(formatter.string(from: sunday))のランキング"
}
P.S.ちなみに、最初は以下で月曜日を取得しようとしたが、出力すると日曜日になっていた。。なぜ?
// 今週の月曜日を取得
var startOfWeek = calendar.date(from: calendar.dateComponents([.yearForWeekOfYear, .weekOfYear], from: today))!