首页 文章

从NSCalendar获得一个月的第一天

提问于
浏览
7

我有一个方法的子集,需要获得当月的第一天 .

NSDate *today = [NSDate date];  // returns correctly 28 february 2013
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
components.day = 1;
NSDate *dayOneInCurrentMonth = [gregorian dateByAddingComponents:components toDate:today options:0];

dayOneInCurrentMonth 然后打印 2013-03-01 09:53:49 +0000 ,即下个月的第一天 .

我如何获得当月的第一天?

6 回答

  • 1

    你的逻辑是错误的:你没有将日期设置为1,而是在当前日期添加一天 .

    尝试类似的东西:

    NSDate *today = [NSDate date];
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    
    NSDateComponents *components = [gregorian components:(NSEraCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit) fromDate:today];
    components.day = 1;
    
    NSDate *dayOneInCurrentMonth = [gregorian dateFromComponents:components];
    
  • 16

    你想要 [NSCalender dateFromComponents:]

    NSDate *dayOneInCurrentMonth = [gregorian dateFromComponents:components];
    
  • 1

    从给定日期到第一个的简单方法:

    NSDate *first = [gregorian dateBySettingUnit:NSCalendarUnitDay value:1 ofDate:date options:0];
    
  • 1

    获取上个月第一个和最后一个日期的简便方法是:

    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSDateComponents *comp = [gregorian components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay ) fromDate:[NSDate date]];
    
    //TO GET PREVIOUS MONTH LAST DAY
    [comp setMonth:[comp month]];
    [comp setDay:1];
    NSDate *tDateMonth = [gregorian dateFromComponents:comp];
    NSLog(@"LAST DAY OF PREVIOUS MONTH ;  %@", tDateMonth);
    
    //TO GET PREVIOUS MONTH FIRST DAY
    [comp setMonth:[comp month]-1];
    [comp setDay:3];
    NSDate *td = [gregorian dateFromComponents:comp];
    NSLog(@"FIRST DAY OF PREVIOUS MONTH ;  %@", td);
    

    希望这可以帮助

  • 0

    通过创建新变量对内存使用来说代价很高,最好使用日期格式化程序来获取当月的第一天

    today = [NSDate date];
    
    firstDayDateFormatter = [[NSDateFormatter alloc] init];
    [firstDayDateFormatter setDateFormat:@"01-MM-yyyy"];
    dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy"];
    [dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US"]];
    firstDayOfTheMonth = [mdfDateFormat dateFromString:[firstDayDateFormatter stringFromDate:today]];
    
  • 0
    NSDate *startDate = nil;
    [[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitMonth startDate:&startDate interval:NULL forDate:date];
    
    return startDate;
    

相关问题