2016-12-09 26 views
8
let calendar = Calendar.current 
    var dateComponents = DateComponents() 
    dateComponents.weekday = calendar.firstWeekday 
    dateComponents.weekOfYear = 2 
    dateComponents.year = 2017 
    let startOfWeek = calendar.date(from: dateComponents) 
    let endOfWeek = calendar.date(byAdding: .day, value: 6, to: startOfWeek!) 
    let formatter = DateFormatter() 
    formatter.dateStyle = .short 
    print(formatter.string(from: startOfWeek!)) 
    print(formatter.string(from: endOfWeek!)) 

in:Bắt sai bắt đầu và ngày kết thúc từ weekOfYear

1/8/17 
    1/14/17 

đang thay đổi:

dateComponents.weekOfYear = 1 
    dateComponents.year = 2017 

in:

12/31/17 
    1/6/18 

tại sao 12/31/17?

có ai cho tôi biết không? cảm ơn rất nhiều.

+0

thử mà không tạo các định dạng ngắn, in toàn bộ ngày –

+0

Sử dụng ['yearForWeekOfYear'] (https://developer.apple.com/reference/foundation/datecomponents/1779818-yearforweekofyear) thay vì 'year' khi làm việc với' weekOfYear'. – user28434

+0

cảm ơn bạn rất nhiều – 7owen

Trả lời

7

Khi tôi sử dụng .full kiểu để in ngày, tôi nhận được chủ nhật, ngày 31 tháng 12 năm 2017 cho ngày đầu tiên, nhưng rõ ràng là sai bởi vì ngày 31 tháng 12 là thứ năm.

Nếu bạn muốn có ngày chính xác, hãy sử dụng yearForWeekOfYear thay vì year. Docs:

Bạn có thể sử dụng thuộc tính yearForWeekOfYear với thuộc tính weekOfYear và weekday để nhận ngày tương ứng với một ngày trong tuần cụ thể của một tuần nhất định trong năm. Ví dụ, ngày thứ 6 của tuần thứ 53 của năm 2005 (ISO 2005-W53-6) tương ứng với ngày 1 tháng 1 năm 2005 theo lịch Gregorian.

Alternative, bạn có thể có một chút nghịch ngợm và không lắng nghe những tài liệu và sử dụng weekOfYear = 54:

let calendar = Calendar.current 
var dateComponents = DateComponents() 
dateComponents.weekday = calendar.firstWeekday 
dateComponents.weekOfYear = 54 
dateComponents.year = 2017 
let startOfWeek = calendar.date(from: dateComponents) 
let endOfWeek = calendar.date(byAdding: .day, value: 6, to: startOfWeek!) 
let formatter = DateFormatter() 
formatter.dateStyle = .short 
print(formatter.string(from: startOfWeek!)) 
print(formatter.string(from: endOfWeek!)) 

in này:

1/1/17 
1/7/17 

đó là tình cờ, ngày đúng .

+0

cảm ơn bạn rất nhiều – 7owen

+1

@ 7owen Nếu bạn nghĩ câu trả lời của tôi trả lời câu hỏi của bạn, hãy xem xét chấp nhận câu hỏi bằng cách nhấp vào dấu kiểm đó! – Sweeper

Các vấn đề liên quan