Mick Walker Mick Walker - 5 months ago 10
Objective-C Question

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.

Answer

Use floor instead of round:

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