首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一周中某一天的日期列表

一周中某一天的日期列表
EN

Stack Overflow用户
提问于 2017-06-07 15:24:27
回答 3查看 2.7K关注 0票数 4

我需要一周中给定日期的日期列表。

举个例子:如果用户选择像2017-6-7这样的随机日期,我需要获取并显示一周的日期。2017-6-4、2017-6-5、2017-6-6、2017-6-7、2017-6-8、2017-6-9、2017-6-10

我在网上找不到任何解决办法。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-07 15:50:50

试试这个:

代码语言:javascript
复制
let dateInWeek = Date()//7th June 2017

let calendar = Calendar.current
let dayOfWeek = calendar.component(.weekday, from: dateInWeek)
let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: dateInWeek)!
let days = (weekdays.lowerBound ..< weekdays.upperBound)
    .compactMap { calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: dateInWeek) }

print(days)

它会给你这样的答案:

2017年6月4日(星期日) 2017年6月5日 2017年6月6日 2017年6月7日 2017年6月8日 2017年6月9日 2017年6月10日(星期六)

Start fromMonday

以上是我的日历的默认行为,这就是为什么它从周日开始。

如果您希望从星期一开始,那么执行以下更改:

代码语言:javascript
复制
let dayOfWeek = calendar.component(.weekday, from: dateInWeek) - 1

这取决于您的日历所在的地区。

票数 14
EN

Stack Overflow用户

发布于 2017-06-07 15:39:57

这是使用Calendar的日期数学技巧的起点

代码语言:javascript
复制
var calendar = Calendar.current
calendar.firstWeekday = 1 // adjust first weekday if necessary
var startOfWeek = Date()
var interval : TimeInterval = 0.0
_ = calendar.dateInterval(of:.weekOfYear, start: &startOfWeek, interval: &interval, for: Date())
for i in 0..<7 {
    print(calendar.date(byAdding: .day, value: i, to: startOfWeek)!)
}
票数 1
EN

Stack Overflow用户

发布于 2017-06-07 15:56:13

你可以用这个。

代码语言:javascript
复制
 let today = Date()
  let  weekStartDate = today.getWeekStartDate(fromDate: today)
   for i in 0..<5 {
    let nextDate = weekStartDate?.getNextDay(value: i, currentDate:weekStartDate)
}

func getWeekStartDate(fromDate : Date?) -> Date? {

        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"

        if let date = fromDate {
            var calendar = Calendar(identifier: .gregorian)
            calendar.firstWeekday = 3
            var startDate : Date = Date()
            var interval : TimeInterval = 0

            if calendar.dateInterval(of: .weekOfYear, start: &startDate, interval: &interval, for: date) {
                print("Start of week is \(startDate)")
                // prints "Start of week is 2017-01-01 06:00:00 +0000"
                return startDate
            }
        }
        return nil
    }


     func getNextDay(value : Int, currentDate : Date?) -> Date? {

            let dayComponenet = NSDateComponents()
            dayComponenet.day = value

            let theCalendar = NSCalendar.current
            let nextDate = theCalendar.date(byAdding: dayComponenet as DateComponents, to: currentDate!)
            return nextDate

        }

希望这能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44416831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档