【问题标题】:iOS: getting weekOfMonth from date issueiOS:从日期问题获取 weekOfMonth
【发布时间】:2016-07-26 07:40:10
【问题描述】:

从日期获取WeekOfMonth 存在一个小问题。这是一个示例代码。

NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
[dateformate setDateFormat:@"dd/MM/yyyy"]; // Date formater

NSDate *dateTest1 = [dateformate dateFromString:@"25/07/2016"]; //Week no: 5
NSDate *dateTest2 = [dateformate dateFromString:@"01/08/2016"]; //Week no: 1
NSDate *dateTest3 = [dateformate dateFromString:@"08/08/2016"]; //Week no: 2
NSDate *dateTest4 = [dateformate dateFromString:@"15/08/2016"]; //Week no: 3
NSDate *dateTest5 = [dateformate dateFromString:@"22/08/2016"]; //Week no: 4
NSDate *dateTest6 = [dateformate dateFromString:@"29/08/2016"]; //Week no: 5
NSDate *dateTest7 = [dateformate dateFromString:@"05/09/2016"]; //Week no: 6

components = [calendar components:NSCalendarUnitWeekOfMonth fromDate:dateTest1];
dateString = [dateformate stringFromDate:dateTest1];
NSLog(@"dateTest1 -> %@",dateString); //output : dateTest1 -> 25/07/2016
NSLog(@"Week no: %ld",(long)[components weekOfMonth]); //output : Week no: 4

components = [calendar components:NSCalendarUnitWeekOfMonth fromDate:dateTest2];
dateString = [dateformate stringFromDate:dateTest2];
NSLog(@"dateTest2 -> %@",dateString); //output : dateTest2 -> 01/08/2016
NSLog(@"Week no: %ld",(long)[components weekOfMonth]); //output : Week no: 1

components = [calendar components:NSCalendarUnitWeekOfMonth fromDate:dateTest3];
dateString = [dateformate stringFromDate:dateTest3];
NSLog(@"dateTest3 -> %@",dateString); //output : dateTest3 -> 08/08/2016
NSLog(@"Week no: %ld",(long)[components weekOfMonth]); //output : Week no: 2

components = [calendar components:NSCalendarUnitWeekOfMonth fromDate:dateTest4];
dateString = [dateformate stringFromDate:dateTest4];
NSLog(@"dateTest4 -> %@",dateString); //output : dateTest4 -> 15/08/2016
NSLog(@"Week no: %ld",(long)[components weekOfMonth]); //output : Week no: 3

components = [calendar components:NSCalendarUnitWeekOfMonth fromDate:dateTest5];
dateString = [dateformate stringFromDate:dateTest5];
NSLog(@"dateTest5 -> %@",dateString); //output : dateTest5 -> 22/08/2016
NSLog(@"Week no: %ld",(long)[components weekOfMonth]); //output : Week no: 4

components = [calendar components:NSCalendarUnitWeekOfMonth fromDate:dateTest6];
dateString = [dateformate stringFromDate:dateTest6];
NSLog(@"dateTest6 -> %@",dateString); //output : dateTest6 -> 29/08/2016
NSLog(@"Week no: %ld",(long)[components weekOfMonth]); //output : Week no: 5

components = [calendar components:NSCalendarUnitWeekOfMonth fromDate:dateTest7];
dateString = [dateformate stringFromDate:dateTest7];
NSLog(@"dateTest7 -> %@",dateString); //output : dateTest7 -> 05/09/2016
NSLog(@"Week no: %ld",(long)[components weekOfMonth]); //output : Week no: 2

如您所见,dateTest1 应该是 Week no = 5 而不是 Week no = 4。正如我所见和你所见,其他日期没有问题。

我需要正确的WeekOfMonth 来正确设置我的FFCalendar https://github.com/fggeraissate/FFCalendar

【问题讨论】:

    标签: ios xcode calendar nsdate ios9.2


    【解决方案1】:
    let calendar = NSCalendar.currentCalendar()
    let dateComponent = calendar.components([.WeekOfYear, .Day, .Month, .Year], fromDate: NSDate(timeIntervalSinceNow: 0))
    print("weekOfYear \(dateComponent.weekOfYear)")
    

    使用上面的代码,您可以获得 weekOfYear。现在您需要计算该月第一个日期的 weekOfYear 和您需要查找的日期。 现在为了得到 weekOfMonth 得到两个 WeekOfYear 的 diff + 1

    【讨论】:

    • 感谢您的回答。使用 weekOfMonth 不取决于我,它取决于 FFCalendar。在方法 dateChanged 上的 FFWeekCalendarView 上,我需要正确设置 WeekOfMonth,因为它适用于 WeekOfMonth。我认为我不能在 FFCalendar 中使用 weekOfYear 代替 weekOfMonth。
    • 对不起,我明白了!它工作得很好。谢谢
    • 每月返回 1-4 或第 5 周,一年中的第几周应返回 1-52 或 53
    【解决方案2】:

    按照 raj-agrawal 提出的解决方案,我提出了这个运行良好的解决方案

    NSDate *date = [[FFDateManager sharedManager] currentDate];
    
    NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
    [dateformate setDateFormat:@"dd/MM/yyyy"]; // Date formater
    
    NSString *dateString = [dateformate stringFromDate:date];
    NSCalendar* calendar = [NSCalendar currentCalendar];
    NSDateComponents* dateComponent = [calendar components:NSWeekOfYearCalendarUnit|NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:date];
    NSInteger weekOfYearCurrent =(long)[dateComponent weekOfYear];
    dateString = [dateformate stringFromDate:date];
    NSLog(@"dateCurrent -> %@",dateString);
    NSLog(@"weekOfYearCurrent: %ld",(long)weekOfYearCurrent);
    
    NSDate *dateFirstMonth = [dateformate dateFromString:[NSString stringWithFormat:@"01/%d/2016", (int)[dateComponent month]]];
    dateComponent = [calendar components:NSWeekOfYearCalendarUnit|NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:dateFirstMonth];
    NSInteger weekOfYearFirstDayOfMonth =(long)[dateComponent weekOfYear];
    dateString = [dateformate stringFromDate:dateFirstMonth];
    NSLog(@"dateFirstMonth -> %@",dateString);
    NSLog(@"weekOfYearFirstDayOfMonth: %ld",(long)weekOfYearFirstDayOfMonth);
    
    NSInteger NumberWeekOfMonth = (weekOfYearCurrent - weekOfYearFirstDayOfMonth) + 1;
    NSLog(@"NumberWeekOfMonth: %ld",(long)NumberWeekOfMonth);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多