【问题标题】:Get name of days between two date in ios?在ios中获取两个日期之间的天数?
【发布时间】:2012-07-22 09:29:59
【问题描述】:

如何在 ios 中获取两个日期之间的天数?

例子:

输入: 开始日期:2012 年 3 月 11 日 结束日期:2012 年 5 月 11 日 输出: 3-11-2012 星期三 4-11-2012 星期四 5-11-2012 星期五

谢谢..

【问题讨论】:

  • 查看NSDateFormatter,使用@"dMy" 的格式字符串将@"3-11-2012" 和@"5-11-2012" 从字符串转换为日期,然后使用@ "dMy EEEE" 将结果日期转换回字符串,包括星期几。
  • Ganesh.. 不是天数...我想要两个日期之间的天数。
  • 不清楚“两个日期之间的天数”是什么意思。您的示例仅显示“中点”日期;这是你想要的结果吗?如果开始日期和结束日期不是一个月的同一天怎么办?
  • Richard .. 现在问题解决了.. ankur 的代码运行良好.. 谢谢。并感谢所有...

标签: objective-c ios ios5 ios4 nsdate


【解决方案1】:

试试这个,

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"yyyy-MM-dd"];
    NSDate *startDate = [df dateFromString:@"2012-07-20"]; // your start date
    NSDate *endDate = [NSDate date]; // your end date
    NSDateComponents *dayDifference = [[NSDateComponents alloc] init];

    NSMutableArray *dates = [[[NSMutableArray alloc] init] autorelease];
    NSUInteger dayOffset = 1;
    NSDate *nextDate = startDate;
    do {
        [dates addObject:nextDate];

        [dayDifference setDay:dayOffset++];
        NSDate *d = [[NSCalendar currentCalendar] dateByAddingComponents:dayDifference toDate:startDate options:0];
        nextDate = d;
    } while([nextDate compare:endDate] == NSOrderedAscending);

    [df setDateStyle:NSDateFormatterFullStyle];
    for (NSDate *date in dates) {
        NSLog(@"%@", [df stringFromDate:date]);
    }
    [df release];

输出为

Friday, July 20, 2012
Saturday, July 21, 2012
Sunday, July 22, 2012
Monday, July 23, 2012
Tuesday, July 24, 2012

【讨论】:

  • 糟糕,我忘了释放 dayDifference 对象... :)
【解决方案2】:

检查这个解决方案:

NSDateComponents *components;
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd-MM-yyyy"];

NSDate *startDate = [dateFormat dateFromString:@"3-11-2012"];
NSDate *endDate = [dateFormat dateFromString:@"5-11-2012"];

[dateFormat setDateFormat:@"dd-MM-yyyy, EEEE"];

components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit fromDate:startDate toDate:endDate options:0];

int days = [components day];

for (int x = 0; x <= days; x++) {
    NSLog(@"%@", [dateFormat stringFromDate:startDate]);
    startDate = [startDate dateByAddingTimeInterval:(60 * 60 * 24)];
}

输出是:

03-11-2012, Saturday
04-11-2012, Sunday
05-11-2012, Monday

【讨论】:

    【解决方案3】:

    这是一种方法:

    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    [dateComponents setYear:2012];
    [dateComponents setMonth:11];
    [dateComponents setDay:03];
    
    NSDate *date1 = [gregorianCalendar dateFromComponents:dateComponents];
    
    [dateComponents setYear:2012];
    [dateComponents setMonth:11];
    [dateComponents setDay:05];
    
    NSDate *date2 = [gregorianCalendar dateFromComponents:dateComponents];
    
    NSDateFormatter *outputDateFormatter = [[NSDateFormatter alloc] init];
    [outputDateFormatter setDateFormat:@"dd-MM-yyyy EEEE"];
    NSDate *dayDate;
    
    dayDate = date1;
    NSLog(@"%@", [outputDateFormatter stringFromDate:dayDate]);
    
    do {
        dayDate = [dayDate dateByAddingTimeInterval:86400];
        NSLog(@"%@", [outputDateFormatter stringFromDate:dayDate]);
    
    } while ([dayDate compare:date2]==NSOrderedAscending);
    

    使用 NSCalendar 可以让您(和您的用户)更灵活地显示和操作日期。

    【讨论】:

      【解决方案4】:

      这是你需要的:

      NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
      [inputFormatter setDateFormat:@"mm-dd-yyyy"];
      NSDate *inputDate = [inputFormatter dateFromString:@"3-11-2012"];
      
      NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
      [outputFormatter setDateFormat:@"mm-dd-yyyy EEEE"];
      NSString *output = [outputFormatter stringFromDate:inputDate];
      
      NSLog(@"%@",output);
      
      [inputFormatter release];
      [outputFormatter release];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-05
        • 1970-01-01
        • 1970-01-01
        • 2014-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多