Monday, February 14, 2011

Rounding of NSdate to nearest 30 minute

 //Call changeTimeValue function and change date value to nearest 30 minute
for eg.
dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd-MM-yyyy hh:mm a"];
[fromField setText:[dateFormat stringFromDate:
           [self changeTimeValue:[dateFormat dateFromString:[NSDate date]]]]];
 
- (NSDate *)changeTimeValue:(NSDate *)dateValue{
    NSDateComponents *time = [[NSCalendar currentCalendar] 
    components:NSHourCalendarUnit | NSMinuteCalendarUnit
    fromDate:dateValue];
    int val = 0;
    NSDate *newDate = [[[NSDate alloc] init] autorelease];
    NSInteger minutes = [time minute];
    if(minutes > 0 && minutes < 30) {
        val = 30 - minutes; NSTimeInterval aTimeInterval = [dateValue 
        timeIntervalSinceReferenceDate] + 60 * val + minutes;
        newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
        return newDate;
    } else if(minutes > 30 && minutes < 60) {
        val = 60 - minutes;
        NSTimeInterval aTimeInterval = [dateValue timeIntervalSinceReferenceDate] 
                                       + 60 * val;
        newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
        return newDate;
    } else {
        return newDate;
    }
}