【问题标题】:How to find specific days with date between two dates如何在两个日期之间查找日期的特定日期
【发布时间】:2017-04-22 02:56:55
【问题描述】:

我有两个日期 StartDate 和 EndDate。和 weekDays,我想找到特定的日子,例如这两个日期之间的星期一、星期二、星期六。以及如何在第二个循环中更改特定日期。

我想在下面的代码中在数组流中添加多个对象

NSDictionary *dict = @{
                   @"name": @"kiran",
                   @"startdate": @"25-11-16",
                   @"SUNDAY": @"none"
                   @"MONDAY": @"monday"
                   @"TUESDAY": @"tuesday"
                   @"WEDNESDAY": @"none"
                   @"THURSDAY": @"none"
                   @"FRIDAY": @"friday"
                   @"SATURDAY": @"none" 
                   @"EndDate": @"7-12-2016"
                   };

NSDictionary *dict1 = @{
                   @"name": @"Bala",
                   @"startdate": @"1-11-16",
                   @"SUNDAY": @"sunday"
                   @"MONDAY": @"none"
                   @"TUESDAY": @"tuesday"
                   @"WEDNESDAY": @"none"
                   @"THURSDAY": @"thursday"
                   @"FRIDAY": @"friday"
                   @"SATURDAY": @"none" 
                   @"EndDate": @"7-12-2016"
                   };

NSDictionary *dict2 = @{
                   @"name": @"Sri",
                   @"startdate": @"1-12-16",
                   @"SUNDAY": @"sunday"
                   @"MONDAY": @"monday"
                   @"TUESDAY": @"tuesday"
                   @"WEDNESDAY": @"wednesday"
                   @"THURSDAY": @"thursday"
                   @"FRIDAY": @"friday"
                   @"SATURDAY": @"saturday" 
                   @"EndDate": @"7-12-2016"
                   };

NSMutableArray *listMutableArray =[[NSMutableArray alloc] initWithObjects:dict,dict1,dict2, nil];

如何在两个日期之间执行循环?

我想要的输出是:第一个字典

25-11-2016,星期五,基兰

28-11-2016,星期一,基兰

29-11-2016,星期二,基兰

2-12-2016,星期五,基兰

2016 年 5 月 12 日,星期一,基兰

2016 年 6 月 12 日,星期二,基兰

与第二个和第三个 dict 输出相同。并且所有工作日都存储在一个数组中。

【问题讨论】:

  • 如果你需要只有开始日期和天数的日期,swift的原生日期实际上有一个方法addingTimeInterval(timeInterval),你可以使用它来获取你需要的日期。跨度>
  • 但是我不明白您所说的“如何在第二个循环中更改特定日期”是什么意思,您可能想发布两个循环的代码,以便我了解您是如何解决这个问题的以开头
  • @BenOng 请建议我该怎么做?
  • 我有很多字典,在这本字典中定义了像“星期天,星期一”这样的日子,所以如何找到两个日期之间的特定工作日
  • @BenOng 请帮忙

标签: ios objective-c iphone nsdate


【解决方案1】:
extension Date {

    static func generateDatesArrayBetweenTwoDates(startDate: Date, endDate: Date) -> [Date] {
        var datesArray: [Date] = [Date]()
        var startDate = startDate
        let calendar = Calendar.current
        while startDate <= endDate {
            let tempDate = self.dateFormatter().string(from: startDate)
            datesArray.append(self.dateFormatter().date(from: tempDate) ?? Date())
            startDate = calendar.date(byAdding: .day, value: 1, to: startDate)! 
        }
        return datesArray
    }

    static func dateFormatter() -> DateFormatter {
        let formatter = DateFormatter()
        formatter.dateFormat = "MM/dd/yyyy"
        return formatter
    }

}

获取特定天数

func getDates() {
        var count = 0
        let tempStartDate = Date.dateFormatter().string(from: Date())
        guard let startDate = Date.dateFormatter().date(from: tempStartDate) else {
            return
        }
        let tempEndDate = Date.dateFormatter().string(from: Date(timeIntervalSince1970: 1575181456)) // lets say 1st dec 2019
        guard let endDate = Date.dateFormatter().date(from: tempEndDate) else {
            return
        }
        let datesArray = Date.generateDatesArrayBetweenTwoDates(startDate: endDate, endDate: startDate)
        for date in datesArray {
            let calendar = Calendar(identifier: .gregorian)
            let components = calendar.dateComponents([.weekday], from: date)
            if components.weekday == 6 { // For friday check
                count += 1
                print("Hello Friday")
            } else {
                print("It's not Friday")
            }
        }
        print("number of fridays", count)
    }

希望对你有帮助

【讨论】:

    【解决方案2】:

    我更习惯于 swift,所以我将使用 swift 而不是 objC 来给出我的答案,如果你的代码必须使用 objC,则将其作为伪代码阅读

    要获得您想要的结果,只需说 MutableArray 的第一项

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd-MM-yyyy"
    
    let dict = listMutableArray[0] as Dictionary
    let name = dict["name"]
    let startDate = dateFormatter.date(from: dict["startdate"])
    let endDate = dateFormatter.date(from: dict["enddate"])
    
    let totalDuration = endDate.timeIntervalSince(startDate)
    let totalDuration = totalDuration/86400 //to get days from seconds - 86400 = 60*60*24
    
    let weekDaysToCount:Array<Bool> = Array()
    if dict["MONDAY"] != "none" {
        weekDaysToCount.append(true)
    } else {
        weekDaysToCount.append(false)
    }
    ... ...
    //Repeat for all days
    
    for i in 0..<Int(totalDuration) {
        for validDay in weekDaysToCount {
            startDate = startDate.addingTimeInterval(86400) //one day
            if validDay {
                print("\(startDate), \(name)")
            }
        }
    }
    

    请注意,weekDaysToCount 假设起始日为星期一,此时情况并非如此,因此您需要调整数组。

    【讨论】:

    • 如果你需要逻辑方面的帮助,最好展示你已经拥有的东西,我在这段代码中做了很多不应该在实际情况下发生的假设
    • 抱歉延迟重播,请在 ObjC 中转换。因为您的代码无法使用,而我在 ObjC 中的推荐。
    • 请不要让我为您输入代码,您可以使用该逻辑来创建代码。函数和参数名称将大体相似,该逻辑将充分帮助您获得结果。
    • 好的,请稍等,因为我正在转换您的代码。并感谢您付出宝贵的时间。
    • 请注意,由于夏令时,此代码会产生错误,因为天可以有 23、24 或 25 小时。一天不要使用 86400 秒,而是使用 NSCalendar api。
    猜你喜欢
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多