2017-02-07 23 views
-1

我有一個要求,如果我給特定的日期,如:如何知道給定的日期是哪個月的哪個星期?

  1. 鍵入2016-02-01,應返回2016-2-1,意味着2016-02-01屬於2016年的二月的第一週。

  2. 鍵入2016-09-01,應返回2016-8-5,意味着2016-09-01屬於2016年月的第五週。

  3. 如果2016-01-01不是星期一,返回年份應該是2015-x-x

注意,在那裏的公式模式是從週一到週日爲一個星期。 如2016-04,2016-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); 
} 
+0

你能與我們分享您的當前代碼或您嘗試過的任何內容? – viral

+0

@iOS App Dev,我在我的問題中發佈我的代碼,起初我使用NSCalender,但是我發現它不符合我的要求。 – lme

回答

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]) 

{}

如果您只想檢查一天,或者刪除「小時」組件,並刪除「天」(並用NSWeekCalendarUnit和-week方法替換)來檢查星期,則刪除「小時」組件。

+0

公式模式爲星期一至星期日。 – lme

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

+0

我很抱歉,我的測試是你的思路,但你看我的代碼,如果我輸入「@」2016-04-02「',它會打印」2016-4-1「,但它應該是'2016-03-weekOf03'。看到我的要求。 – lme

+0

formatDateStr是一個字符串 –

+0

你看到我的注意,和我的VC的代碼。我的Util的代碼與你的答案類似,我已經明確NSCalendar在我的文章中不適合我的問題,所以我正在等待答案。 – lme

相關問題