あなたのコードはロケールに応じて、 日曜日か月曜日(あるいはいくつかの他の日)とすることができるよう、特定の週に初日を返します。
月曜日は、あなたが特定の週の月曜日にしたい場合は、週の 開始は、その後、何であるかの独立したが、comps.weekday = 2
を設定
cal.firstWeekDay = 2
を設定し、最初の平日と見なさたい場合:
Date
を印刷することは、常にGMTタイムゾーンを使用していること
func getMonday(myDate: Date) -> Date {
let cal = Calendar.current
var comps = cal.dateComponents([.weekOfYear, .yearForWeekOfYear], from: myDate)
comps.weekday = 2 // Monday
let mondayInWeek = cal.date(from: comps)!
return mondayInWeek
}
注意、 あなたは結果を印刷する日付フォーマッタが必要になりますあなたの現地時間帯に従って。例:
let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm"
let now = Date()
print(df.string(from: now)) // 2016-10-02 20:16
let monday1 = getMonday(myDate: now)
print(df.string(from: monday1)) // 2016-09-26 00:00
日付の印刷は常にGMTを使用しているので、出力は実際には '2016-10-01 22:00:00 + 0000'となります。これは' 2016-10-02 00:00:あなたのタイムゾーンでは00日です。それは日曜日です。 'Calendar'は' firstWeekday'プロパティを持っていて、その日の最初の日をコントロールします。月曜日は2 = Mondayに設定する必要があります。 –