Как вы получаете все 4 (или 5) отдельные недели в месяце от Date () в swift? - PullRequest
0 голосов
/ 25 января 2019

Мне удалось получить запрос данных со свойством «nextDate» типа Date () за определенный месяц. Другими словами, все данные с датами в этом конкретном месяце появятся в моем табличном представлении при запросе. Используя приведенный ниже код и с настройками, мне также удалось извлечь данные за предыдущий и следующий месяц.

func loadMonthEvents() {
    let date = Date()
    let calendar = Calendar.current

    var beginningOfMonth: Date?
    var endOfMonth: Date?

    beginningOfMonth = calendar.dateInterval(of: .month, for: date)?.start
        endOfMonth = calendar.dateInterval(of: .month, for: date)?.end

    monthEvents = realm.objects(Events.self).filter("nextDate BETWEEN %@", [beginningOfMonth, endOfMonth]).sorted(byKeyPath: "nextDate", ascending: true)
}

Теперь я хочу разделить эти данные по неделям месяца. В моем tableView будет 5 отдельных заголовков, представляющих неделю 1, неделю 2, неделю 3, неделю 4 и неделю 5 (если есть). Каждый отдельный заголовок будет показывать только событие за эту неделю. Я пытался применить weekOfMonth в календаре, но он просто не работает. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Вы можете получить диапазон недель из ваших двух дат, выполнив

let w1 = calendar.dateComponents([.weekOfYear], from: beginningOfMonth!)
print(w1.weekOfYear)

let w2 = calendar.dateComponents([.weekOfYear], from: endOfMonth!)
print(w2.weekOfYear)

И затем вы можете сделать то же самое для даты каждого события, чтобы сгруппировать событие в определенную неделю

0 голосов
/ 25 января 2019

Вот фрагмент, чтобы узнать первый и последний день недели.Вы можете сделать это, добавив .weekOfMonth к компоненту даты.Перейдите по этой официальной ссылке и подайте заявку в соответствии с вашими требованиями для получения.Теперь я добавил две функции / или две кнопки, с помощью которых вы можете получить предыдущую неделю и следующую неделю месяца.

    var currentDate = Date()
    func weekCalculation()
    {
        let calendar = NSCalendar.current
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"
//        dateFormatter.dateStyle = .medium
        var componentsNow = calendar.dateComponents([.year, .month, .weekOfMonth, .weekday], from: currentDate)
        componentsNow.setValue(1, for: .weekday)
        firstDayOfWeek = calendar.date(from: componentsNow)!
        print(firstDayOfWeek)
        componentsNow.setValue(7, for: .weekday)
        lastDayOfWeek = calendar.date(from: componentsNow)!
        print(lastDayOfWeek)
        let addDaysCount = 0
        var comps = DateComponents()
        comps.setValue(addDaysCount, for: .weekday)
        var comps1 = DateComponents()
        comps1.setValue(-6, for: .day)
        let newDate1 = calendar.date(byAdding: comps1, to: lastDayOfWeek)
        let newDate2 = calendar.date(byAdding: comps, to: lastDayOfWeek)
//        print(newDate1!,newDate2!)
        let firstDay = dateFormatter.string(from: newDate1!)
        let lastDay = dateFormatter.string(from: newDate2!)
//        ShowBanner(title: "", subtitle: firstDay)
        let dF = DateFormatter()
        dF.dateFormat = "d MMMM yyyy"
        let fDayToShow = dF.string(from: newDate1!)
        let lDayToShow = dF.string(from: newDate2!)
        let dateString = String(format: "%@ - %@",fDayToShow,lDayToShow)
        print(firstDay,lastDay)
    }

    @IBAction func nextWeekBtnPressed(sender: UIButton)
    {
        let calendar = NSCalendar.current
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"
//        dateFormatter.dateStyle = .medium
        let dF = DateFormatter()
        dF.dateFormat = "d MMMM yyyy"
        let addDaysCount = 7
        var comps = DateComponents()
        comps.setValue(addDaysCount, for: .weekday)
        var comps1 = DateComponents()
        comps1.setValue(3, for: .day)
        let newDate1 = calendar.date(byAdding: comps1, to: lastDayOfWeek)
        let newDate2 = calendar.date(byAdding: comps, to: lastDayOfWeek)
        let firstDay = dateFormatter.string(from: newDate1!)
        let lastDay = dateFormatter.string(from: newDate2!)
        let fDayToShow = dF.string(from: newDate1!)
        let lDayToShow = dF.string(from: newDate2!)
        //print(firstDay,lastDay)
        let dateString = String(format: "%@ - %@",fDayToShow,lDayToShow)
        //print(dateString)
        weekCalculation()
    }

    @IBAction func previousWeekBtnPressed(sender: UIButton)
    {
            let calendar = NSCalendar.current
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "yyyy-MM-dd"
//            dateFormatter.dateStyle = .medium
            let addDaysCount = -7
            var comps = DateComponents()
            comps.setValue(addDaysCount, for: .weekday)
        var comps1 = DateComponents()
        comps1.setValue(-10, for: .day)
        let newDate1 = calendar.date(byAdding: comps1, to: lastDayOfWeek)
            let newDate2 = calendar.date(byAdding: comps, to: lastDayOfWeek)
            let firstDay = dateFormatter.string(from: newDate1!)
            let lastDay = dateFormatter.string(from: newDate2!)
            let dF = DateFormatter()
            dF.dateFormat = "d MMMM yyyy"
            let fDayToShow = dF.string(from: newDate1!)
            let lDayToShow = dF.string(from: newDate2!)
            let dateString = String(format: "%@ - %@",fDayToShow,lDayToShow)
        weekCalculation()
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...