獲取某個日期所在周的起始日期

定義全局變量,firstDayOfWeek是開始的日期,lastDayOfWeek是結束的日期:

  NSDate *firstDayOfWeek;
  NSDate *lastDayOfWeek;
  NSCalendar *calendar;
  NSDate *date;

我這邊獲取的是當前日期:

- (void)getNowTime{
    date = [NSDate date];
    calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    int unitFlags =  NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit |
    NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    
    NSDateComponents *comps = [calendar components:unitFlags fromDate:date];
    year = [comps year];
    month = [comps month];
    day = [comps day];
    week = [comps weekday];
}

也可以改成其它的日期:

 [comps setMonth:6];
 [comps setDay:1];
 [comps setYear:2017];
 NSDate *weekDate = [calendar dateFromComponents:comps];
int unitFlags =  NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit |
            NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;            
 NSDateComponents *weekComps = [calendar components:unitFlags fromDate:weekDate];

//            [weekComps weekday]  當前日期是周幾
//            [weekComps day]      得到幾號
[self getWeekDate:weekComps Week:[weekComps weekday] Day:[weekComps day]];

最后直接調用一下方法:

- (void)getWeekDate:(NSDateComponents*)comps1 Week:(NSInteger)weekDay Day:(NSInteger)getDay{
    // 計算當前日期和這周的星期一和星期天差的天數
    long firstDiff,lastDiff;
    if (weekDay == 1){
        firstDiff = -6;
        lastDiff = 0;
    }else{
        firstDiff = [calendar firstWeekday] - weekDay + 1;
        lastDiff = 8 - weekDay;
    }
        [comps1 setDay:getDay+firstDiff];
        firstDayOfWeek = [calendar dateFromComponents:comps1];
        
        [comps1 setDay:getDay+lastDiff];
        lastDayOfWeek = [calendar dateFromComponents:comps1];
        
        NSDateFormatter *formater = [[NSDateFormatter alloc] init];
        [formater setDateFormat:@"MM.dd"];
    
       //起始日期
       NSString *str = [NSString stringWithFormat:@"%@-%@",[formater stringFromDate:firstDayOfWeek],[formater stringFromDate:lastDayOfWeek]];

}

最近寫的這個項目的需求是獲取一直到當前日期的月日日期、所有周的起始日期和所有的年月,就寫了一下:

#import <UIKit/UIKit.h>
@interface BasicViewController : UIViewController
{
    NSMutableArray *MD_DateArray;
    NSMutableArray *Z_DateArray;
    NSMutableArray *YM_DateArray;
}
@end

#import "BasicViewController.h"
#define beginYear 2017 //開始日期

@interface BasicViewController ()
{
    NSCalendar *calendar;
    NSDate *date;
    NSInteger year;
    NSInteger month;
    NSInteger day;
    NSInteger week;
    NSDate *firstDayOfWeek;
    NSDate *lastDayOfWeek;
    NSString *lastDate;
}
@end

@implementation BasicViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    MD_DateArray = [NSMutableArray array];
    Z_DateArray = [NSMutableArray array];
    YM_DateArray = [NSMutableArray array];
    [self reloadData];
}

- (void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];
    [[UIBarButtonItem appearance]setBackButtonTitlePositionAdjustment:UIOffsetMake(NSIntegerMin, NSIntegerMin) forBarMetrics:UIBarMetricsDefault];
    
    [self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];
}
- (void)reloadData{
    
    [self getNowTime];
    
}

- (void)getNowTime{
    date = [NSDate date];
    calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    int unitFlags =  NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit |
    NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    
    NSDateComponents *comps = [calendar components:unitFlags fromDate:date];
    year = [comps year];
    month = [comps month];
    day = [comps day];
    week = [comps weekday];
    
    [self getAllMonth:comps];
    [self getAllYear:comps];
}

- (void)getAllMonth:(NSDateComponents*)comps{
   
    for (int i = 1; i<month+1+(year-beginYear)*12; i++) {
        if (i%12 != 0) {
            [comps setMonth:i%12];
        }
//        [comps setMonth:i];
        [comps setDay:1];
        [comps setYear:beginYear+i/12];
        date = [calendar dateFromComponents:comps];
        NSLog(@"date:%@",date);
      NSInteger number = (NSInteger)[[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date].length;//一個月的天數
        NSLog(@"====================i:%d,number:%ld",i,(long)number);
        if ((beginYear+i/12 == year) && (i == month)) {
            number = day;
        }
        if (i%12 == 0) {
            i = 12;
        }
        NSLog(@"day:%ld",(long)day);
        for (int j = 1; j<number+1; j++) {
        [MD_DateArray addObject:[NSString stringWithFormat:@"%d.%d",i%12,j]];
            [comps setMonth:i];
            [comps setDay:j];
            [comps setYear:beginYear+i/12];
             NSDate *weekDate = [calendar dateFromComponents:comps];
            int unitFlags =  NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit |
            NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
            
            NSDateComponents *weekComps = [calendar components:unitFlags fromDate:weekDate];

            [self getWeekDate:weekComps Week:[weekComps weekday] Day:[weekComps day]];
        }
    }
   
}

- (void)getAllYear:(NSDateComponents*)comps{
    int mon = 0;
    int yea = 0;
    for (int i = 1; i<month+1+(year-beginYear)*12; i++) {
        mon = i;
        if (i%12 == 0) {
            mon = 12;
        }else{
            mon = i%12;
        }
        if (i<13) {
            yea = 0;
        }else{
            yea = i/12;
        }
        [YM_DateArray addObject:[NSString stringWithFormat:@"%d年%d月",beginYear+yea,mon]];
    }

}

- (void)getWeekDate:(NSDateComponents*)comps1 Week:(NSInteger)weekDay Day:(NSInteger)getDay{
    // 計算當前日期和這周的星期一和星期天差的天數
    long firstDiff,lastDiff;
    if (weekDay == 1){
        firstDiff = -6;
        lastDiff = 0;
    }else{
        firstDiff = [calendar firstWeekday] - weekDay + 1;
        lastDiff = 8 - weekDay;
    }
        [comps1 setDay:getDay+firstDiff];
        firstDayOfWeek = [calendar dateFromComponents:comps1];
        
        [comps1 setDay:getDay+lastDiff];
        lastDayOfWeek = [calendar dateFromComponents:comps1];
        
        NSDateFormatter *formater = [[NSDateFormatter alloc] init];
        [formater setDateFormat:@"MM.dd"];
    
       NSString *str = [NSString stringWithFormat:@"%@-%@",[formater stringFromDate:firstDayOfWeek],[formater stringFromDate:lastDayOfWeek]];
    if ([str isEqualToString:lastDate]) {
        return;
    }else{
        
        [Z_DateArray addObject:[NSString stringWithFormat:@"%@-%@",[formater stringFromDate:firstDayOfWeek],[formater stringFromDate:lastDayOfWeek]]];
         lastDate = str;
    }
//            NSLog(@"Z_DateArray:%@",Z_DateArray);
//    }
}

@end

因為有多個類要使用,所以我直接寫在父類里邊,我感覺我寫的比較麻煩,誰有更簡單方法的,希望賜教。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容