【问题标题】:How to set weekdays date in CollectionView starting from Monday to Saturday in swift如何在集合视图中从周一到周六快速设置工作日日期
【发布时间】:2019-02-03 21:04:09
【问题描述】:

我必须从星期一到星期六在 CollectionView 中显示工作日日期。直到周末,我只需要显示工作日的日期。我的任务图片Image。请帮助/建议我如何完成这项任务。

我得到工作日,但它从当天开始,但我需要从星期一开始日期,

func arrayOfDates() -> NSArray {

        let numberOfDays: Int = 6
        let formatter: DateFormatter = DateFormatter()
        formatter.dateFormat = "dd"
        let startDate = Date()
        let calendar = Calendar.current
        var offset = DateComponents()
        var dates: [Any] = [formatter.string(from: startDate)]

        for i in 1..<numberOfDays {
            offset.day = i
            let nextDay: Date? = calendar.date(byAdding: offset, to: startDate)
            let nextDayString = formatter.string(from: nextDay!)
            dates.append(nextDayString)
        }
        return dates as NSArray
    }

【问题讨论】:

  • 嗨,马丁 R,谢谢。我编辑了我的代码,请检查它
  • stackoverflow.com/q/42981665/1187415 的可能重复项。
  • 是的,你的回答很好,但我需要 6 天,但这里只给了 5 天。如果我删除 .filter { !calendar.isDateInWeekend($0) } 它显示 7 天并且从星期日开始。如何显示星期一是开始日期
  • 您还需要设置 calendar.firstWeekday = 2 以从星期一开始。 firstWeekday 属性告诉您一周中的哪一天在您的语言环境中开始。

标签: ios swift weekday


【解决方案1】:

试试这个

func formattedDaysInThisWeekNet() -> [String]
{
    // create calendar
    let calendar = NSCalendar(identifier: NSCalendar.Identifier.gregorian)!

    // today's date
    let today = NSDate()

    let weekday = calendar.component(.weekday, from: today as Date)
    let beginningOfWeek : NSDate
    if weekday != 2 { // if today is not Monday, get back
        beginningOfWeek = calendar.nextDate(after: today as Date, matching: .weekday, value: 1, options: [.matchNextTime, .searchBackwards])! as NSDate
    } else { // today is Monday
        beginningOfWeek = calendar.startOfDay(for: today as Date) as NSDate
    }
    var formattedDays = [String]()
    for i in 0..<7 {
        let date = calendar.date(byAdding: .day, value: i, to: beginningOfWeek as Date, options: [])!
        formattedDays.append(formatDate(date: date as NSDate))
        let firstDate = calendar.date(byAdding: .day, value: 0, to: beginningOfWeek as Date, options: [])!
        let lastDate = calendar.date(byAdding: .day, value: 6, to: beginningOfWeek as Date, options: [])!
        let fullString = "\(formatDateFull(date: firstDate as NSDate)) - \(formatDateFull(date: lastDate as NSDate))" as String
        fulldateLbl.text = "<  \(fullString)  >"
        print(fullString)
    }
    return formattedDays
}

【讨论】:

  • 谢谢 teja_D。但它只给出星期一的日期。我每周需要 6 天
  • 在你想使用工作日的地方调用这个函数
  • 你能弄清楚这个吗? @拉姆
  • 这一行 formattedDays.append(formatDate(date: date as NSDate))
  • 我完成了这个任务。谢谢teja_D。
【解决方案2】:
enum Days: Int {
    case Sat = 0, Sun, Mon, Tue, Wed, Thu, Fri
    static var all = [Mon, Tue, Wed, Thu, Fri, Sat]
}

func getWeekDays(date: Date) -> [Date] {
    var weekDates = [Date]()

    let cal = Calendar.current
    var comps = cal.dateComponents([.weekOfYear, .yearForWeekOfYear], from: date)
    let days = Days.all
    for day in days {
        comps.weekday = day.rawValue
        weekDates.append(cal.date(from: comps)!)
    }
    return weekDates
}

    print(getWeekDays(date: Date()))  // print all dates from Monday to Saturday 

【讨论】:

  • 谢谢@Atif Khan。但我得到 7 天。我需要从星期一开始
【解决方案3】:

大家好,感谢您的回复。我完成了这个任务。

func arrayOfDates() -> NSArray {

    var calendar = Calendar(identifier: Calendar.Identifier.gregorian)
    let today = calendar.startOfDay(for: Date())
    let dayOfWeek = calendar.component(.weekday, from: today) - calendar.firstWeekday
    let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: today)!
    let dayss = (weekdays.lowerBound ..< weekdays.upperBound)
        .compactMap { calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: today) }
    //.filter { !calendar.isDateInWeekend($0) }

    let formatter = DateFormatter()
    formatter.dateFormat = "dd"

    let strings = dayss.map { formatter.string(from: $0) }
    self.dates = strings as NSArray
    return dates as NSArray
}

但是在这里我有一个问题,如何禁用以前的日期。我只需要选择当前日期和下一个日期。

【讨论】:

  • 我只打印像今天日期 25 这样的日期,但我需要这个日期格式:2018-10-25。如果我更改此甲酸盐,我将无法在 collectionViewCell 中显示整个甲酸盐。请有人帮助我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多