2016-10-02 3 views
1

Я пытаюсь вернуться в понедельник 00:00 с моей даты. Это мой код:Как получить понедельник 00:00 текущей недели? Swift 3

func getMonday(myDate: Date) -> Date { 
    let cal = Calendar.current 
    let comps = cal.dateComponents([.weekOfYear, .yearForWeekOfYear], from: myDate) 
    let beginningOfWeek = cal.date(from: comps)! 
    return beginningOfWeek 
} 

Моя проблема в том, что он не возвращается в понедельник 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) 

Мой вопрос:

Как вернуть понедельник 00:00 от myDate?

спасибо.

+2

Печать даты всегда использует GMT, поэтому я предполагаю, что на самом деле вывод '2016-10-01 22:00:00 + 0000', который является' 2016-10-02 00:00: 00' в вашем часовом поясе, то есть в воскресенье. «Календарь» имеет свойство «firstWeekday», которое контролирует, какой день считается первым за неделю, возможно, вам нужно установить его на 2 = понедельник. –

ответ

7

Ваш код возвращает первый день на данной неделе, который может быть в воскресенье или понедельник (или, возможно, на другой день), в зависимости от вашего региона.

Если вы хотите понедельника считается первыми будним затем установите

cal.firstWeekDay = 2 

Если вы хотите понедельник данной недели, независимо от того, что начала недели, а затем установить comps.weekday = 2:

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 
} 

Обратите внимание, что печать Date всегда использует часовой пояс GMT, вам потребуется форматирования даты чтобы распечатать результат в соответствии с вашим местным часовым поясом. Пример:

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 
Смежные вопросы