【问题标题】:Start and end date of next week swift下周的开始和结束日期swift
【发布时间】:2021-01-26 19:43:58
【问题描述】:

我需要像“1 月 31 日 - 2 月 6 日”这样的日期

我使用了下一个代码:

let calendar = Calendar(identifier: .gregorian)
let dateFormatter = DateFormatter()
let weekday = 1 
let sundayComponents = DateComponents(calendar: calendar, weekday: weekday)

let nextSunday = calendar.nextDate(after: Date(), matching: sundayComponents, matchingPolicy: .nextTimePreservingSmallerComponents)

我需要从周一到周日度过这段时间

【问题讨论】:

    标签: swift calendar


    【解决方案1】:

    你可以使用dateInterval(of:start:interval:for:):

    let formatter = DateFormatter()
    let calendar: Calendar = .current
    
    let now = Date()
    let weekFromNow = calendar.date(byAdding: .weekOfYear, value: 1, to: now)!
    
    var start = weekFromNow
    var interval: TimeInterval = 0
    guard calendar.dateInterval(of: .weekOfYear, start: &start, interval: &interval, for: weekFromNow) else { return }
    
    let end = calendar.date(byAdding: .day, value: -1, to: start.addingTimeInterval(interval))!
    // or let end = start.addingTimeInterval(interval - 1)
    // or let end = calendar.date(byAdding: .day, value: 6, to: start)!
    
    print(formatter.string(from: start), "-", formatter.string(from: end)) 
    

    这将尊重您设备上的“一周开始”。

    【讨论】:

    • 您可以使用 iso8601 日历将星期一作为第一个工作日
    • 或者您也可以从自己的日历中获取firstWeekday。为什么使用iso8601 日历?
    • 除 iso8601 外,AFAIK 的所有日历都将星期日作为第一个工作日
    • 您可以提取日期组件,例如let month = calendar.dateComponents([.month], from: date).month!
    • 一般情况下,不要使用固定日历。使用符合您的区域设置的Calendar.current。这样,它会尊重您的乌克兰一周开始(但对于其他地区的用户,它将尊重他们的日历设置)。
    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 2010-11-19
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多