获取从星期一开始的当前星期的日期数组 [英] Get an Array of Dates of the current week starting on Monday

查看:143
本文介绍了获取从星期一开始的当前星期的日期数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前有以下代码:

public var daysOfWeek: [Date]? {

    let calendar = Calendar.current

    let today = self
    let dayOfWeek = calendar.component(.weekday, from: today)
    if let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: today){

        let days = (weekdays.lowerBound ..< weekdays.upperBound).compactMap {
            calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: today)
        }
        return days
    }else{
        return nil
    }
}

这是Date对象的扩展。

This is an extension of the Date object.

我需要做同样的事情,但是让日历返回我从星期一开始而不是星期日的星期几。

I need to do the same thing, but have the Calendar return me the days of the week starting with Monday and not Sunday.

推荐答案

您只需要使用iso8601日历获取一周中的第一天,其中第一个工作日为星期一,并添加0至6天。像这样尝试:

You just need to get the first day of the week using iso8601 calendar where the first weekday is Monday and add from 0 to 6 days to it. Try like this:

extension Calendar {
    static let iso8601 = Calendar(identifier: .iso8601)
}
extension Date {
    var startOfWeek: Date {
        return Calendar.iso8601.date(from: Calendar.iso8601.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self))!
    }
    var daysOfWeek: [Date] {
        let startOfWeek = self.startOfWeek
        return (0...6).compactMap{ Calendar.current.date(byAdding: .day, value: $0, to: startOfWeek)}
    }
}







Date().daysOfWeek  // ["Aug 13, 2018 at 12:00 AM", "Aug 14, 2018 at 12:00 AM", "Aug 15, 2018 at 12:00 AM", "Aug 16, 2018 at 12:00 AM", "Aug 17, 2018 at 12:00 AM", "Aug 18, 2018 at 12:00 AM", "Aug 19, 2018 at 12:00 AM"]

这篇关于获取从星期一开始的当前星期的日期数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆