如何知道给定日期是哪个月的哪一周?

时间:2017-02-07 09:01:55

标签: ios objective-c date

如果我给出具体日期,我有一个要求,例如:

  1. 输入2016-02-01,应该返回2016-2-1,表示2016-02-01属于2016年2月的第一周。

  2. 输入2016-09-01,应该返回2016-8-5,表示2016-09-01属于2016年8月的第五周。

  3. 如果2016-01-01不是星期一,则返回年份应为2015-x-x

  4. 注意,在那里,公式模式是从星期一到星期日是一周。 例如2016-042016-04-04 - > 2016-04-10是四月的第一周。2016-04-01 - > 2016-04-03不属于四月的周,属于三月。

    我尝试过使用NSCalendar,但要求很特殊,我不知道处理它,所以,有人可以提供一些思路吗?
    提前谢谢。

    我试过的代码:

    在我的Util.m中:

    + (NSString *)getCustomMonthAndWeek:(NSString *)formatDateStr {
    
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"yyyy-MM-dd"];
    
        NSDate *date= [[NSDate alloc] init];
        date = [formatter dateFromString:formatDateStr];
    
        NSCalendar *calen = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    
        NSDateComponents *dateCom = [calen components:(NSCalendarUnitYear | NSCalendarUnitMonth |NSCalendarUnitWeekOfMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date];
    
        NSString *ret_str = @"";
    
        ret_str = [[NSString alloc] initWithFormat:@"%ld-%ld-%@", (long)dateCom.year, (long)dateCom.month, dateCom.weekOfMonth];
    
        return ret_str;
    
    }
    

    在我的VC中:

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        NSString *string = [Util getCustomMonthAndWeek:@"2016-04-02"];  // Here prints 2016-4-1, is not my requirement, you see my Attention.
        NSLog(@"%@", string);
    }
    

2 个答案:

答案 0 :(得分:1)

使用NSCalendar设置为NSDateComponents,您会发现给定日期是哪个月的一周。使用以下代码

 NSDate *date=[NSDate date];

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

NSDateComponents *dateComponents = [gregorianCalendar components:(NSCalendarUnitYear | NSCalendarUnitMonth |NSCalendarUnitWeekOfMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date];

组件提供输出     日历年:2017年     月:2     闰月:没有     日:7     小时:14     分钟:55     每月的一周:2

答案 1 :(得分:0)

NSDate *someDate = // whatever
NSDate *now = [NSDate date];
NSDateComponents *thenComponents = [[NSCalendar currentCalendar] components:NSHourCalendarUnit|NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:someDate];
NSDateComponents *nowComponents = [[NSCalendar currentCalendar] components:NSHourCalendarUnit|NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:now];
if([thenComponents year] == [nowComponents year] && [thenComponents month] == [nowComponents month] && [thenComponents day] == [nowComponents day] && [thenComponents hour] == [nowComponents hour])

{}

如果您只想检查当天,请删除“小时”组件,或删除那个和“day”(并用NSWeekCalendarUnit和-week方法替换)来检查一周。