2016-10-02 55 views
1

私は自分の日付から月曜日の00:00を返そうとしています。これは私のコードです:今週の月曜日の00:00を取得するには? Swift 3

私の問題は、月曜日の00:00、土曜日の22:00を返さないということです。

例:

let monday1 = getMonday(myDate: date) //date is: 2016-10-04 17:00:00 
    print(monday1) //Prints: 2016-10-01 22:00:00 (Saturday) 

私の質問は次のとおりです。

myDateから月曜日午後12時00分返すためにどのように?

ありがとうございました。

+2

日付の印刷は常にGMTを使用しているので、出力は実際には '2016-10-01 22:00:00 + 0000'となります。これは' 2016-10-02 00:00:あなたのタイムゾーンでは00日です。それは日曜日です。 'Calendar'は' firstWeekday'プロパティを持っていて、その日の最初の日をコントロールします。月曜日は2 = Mondayに設定する必要があります。 –

答えて

7

あなたのコードはロケールに応じて、 日曜日か月曜日(あるいはいくつかの他の日)とすることができるよう、特定の週に初日を返します。

月曜日は、あなたが特定の週の月曜日にしたい場合は、週の 開始は、その後、何であるかの独立したが、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 
関連する問題