Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSDate zero out seconds without rounding up

I would like to know if anyone can help me with my method. I have the following method, which will zero out the seconds value of a NSDate object:

- (NSDate *)dateWithZeroSeconds:(NSDate *)date {
    NSTimeInterval time = round([date timeIntervalSinceReferenceDate] / 60.0) * 60.0;
    return  [NSDate dateWithTimeIntervalSinceReferenceDate:time];
}

The problem is when passed a date such as:

2011-03-16 18:21:43 +0000

it returns:

2011-03-16 18:22:00 +0000

I do not want this rounding to occur, as it is a user who is actually specifying the date, so it needs to be exact to the minute they request.

Any help is greatly appreciated.

like image 487
Mick Walker Avatar asked Mar 16 '11 18:03

Mick Walker


1 Answers

To be complete, here is the code referenced to iOS SDK 8.1 using NSCalendar and NSDateComponents.

+ (NSDate *)truncateSecondsForDate:(NSDate *)fromDate;
{
     NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
     NSCalendarUnit unitFlags = NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth |  NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute;
     NSDateComponents *fromDateComponents = [gregorian components:unitFlags fromDate:fromDate ];
     return [gregorian dateFromComponents:fromDateComponents];
}

Note that as of iOS 8 the calendar unit names have changed.

like image 178
Neil Avatar answered Sep 29 '22 13:09

Neil